假設我有一個多模塊maven項目。其中一個項目的POM文件如下:帶插件的Maven配置文件行爲
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>some.group</groupId>
<artifactId>parent-artifact</artifactId>
<version>0.14.0-SNAPSHOT</version>
<relativePath>../../pom.xml</relativePath>
</parent>
<artifactId>artifact-x</artifactId>
<packaging>jar</packaging>
<name>Artifact X</name>
<dependencies>
<dependency>
<groupId>some.group</groupId>
<artifactId>artifact-a</artifactId>
<version>${project.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>some.group</groupId>
<artifactId>artifact-b</artifactId>
<version>${project.version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>some.group</groupId>
<artifactId>artifact-c</artifactId>
<version>${project.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>some.group</groupId>
<artifactId>artifact-d</artifactId>
<version>${project.version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>some.group</groupId>
<artifactId>artifact-e</artifactId>
<version>${project.version}</version>
<scope>runtime</scope>
</dependency>
</dependencies>
</project>
比方說,出於某種原因,我想移動一些依賴於這個POM文件到一個配置文件。因此,在使用profile-1
時,我將artifact-c
,artifact-d
,artifact-e
僅視爲相關性。 profile-1
也用於該項目中的其他POM。我的新POM現在變成:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>some.group</groupId>
<artifactId>parent-artifact</artifactId>
<version>0.14.0-SNAPSHOT</version>
<relativePath>../../pom.xml</relativePath>
</parent>
<artifactId>artifact-x</artifactId>
<packaging>jar</packaging>
<name>Artifact X</name>
<dependencies>
<dependency>
<groupId>some.group</groupId>
<artifactId>artifact-a</artifactId>
<version>${project.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>some.group</groupId>
<artifactId>artifact-b</artifactId>
<version>${project.version}</version>
<scope>runtime</scope>
</dependency>
</dependencies>
<profiles>
<profile>
<id>profile-1</id>
<dependencies>
<dependency>
<groupId>some.group</groupId>
<artifactId>artifact-c</artifactId>
<version>${project.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>some.group</groupId>
<artifactId>artifact-d</artifactId>
<version>${project.version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>some.group</groupId>
<artifactId>artifact-e</artifactId>
<version>${project.version}</version>
<scope>runtime</scope>
</dependency>
</dependencies>
</profile>
</profiles>
</project>
建設的時候,我在兩種情況下,頂層POM運行mvn -Pprofile-1 clean package
。我的期望是,當指定-Pprofile-1
時,將依賴關係移至配置文件不應改變任何內容。但是這並沒有發生 - 一些插件開始出現錯誤 - 例如。該maven-shade-plugin
沒有把artifact-c
,artifact-d
和artifact-e
在陰影罐子等
我是不是做錯了什麼?配置文件不應該這樣工作?
即使與-Pprofile-1
一起使用,這兩個POM文件是不是等效的?
嘿羅伯特, 感謝您的答覆。 所以,多一點信息:我沒有這樣做的自由 - 我試圖修改已經使用配置文件進行依賴關係的Apache Hive(Hadoop-1和Hadoop-2的不同依賴關係)這就是爲什麼我認爲這兩個POM在使用profile-1時應該是等效的。情況並非如此嗎? – 2014-10-28 20:35:05
我只知道Hive和Hadoop的名稱,但我會說:結果是2個不同的應用程序,它們有自己的groupId/artifactId/version,所以有2個不同的poms。即使在引入分類器時,您也無法在配置文件之間做出區別,但它們仍然使用相同的「pom.xml」 – 2014-10-28 21:10:30