我希望为定义特定属性的模块提供一个通用的构建概要文件。在我的例子中,我运行的是jar-with-dependencies插件,希望它只在模块定义main.class属性时运行。
我的父母POM中有以下内容:
<profiles>
<profile>
<id>executable-jar</id>
<activation>
<property>
<name>main.class</name>
</property>
</activation>
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.6</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>${main.class}</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id> <!-- this is used for inheritance merges -->
<phase>package</phase> <!-- bind to the packaging phase -->
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>除非我在运行Maven命令时定义-Dmain.class,否则不会构建它,因此它似乎没有检测到模块中的属性。这能触发吗?
发布于 2016-02-14 19:20:21
你走错路了。配置文件不打算以这种方式使用。。您的配置无法工作,因为使用<property>激活的配置文件只针对系统属性的存在(或缺失),而不仅仅是任何Maven属性。这是因为活动配置文件需要从构建开始就开始计算,而Maven属性则是在此之后设置的(您甚至可以在构建过程中设置属性)。
您真正想要做的是在父POM中筛选出maven-assembly-plugin的配置。这方面的Maven方法是遍历的声明
Plugin以同样的方式包含插件元素,只不过它不是为这个特定的项目构建配置插件信息,而是为了配置从这个项目中继承的项目构建。但是,这只会配置实际上在子元素的plugins元素中引用的插件。
这意味着您可以为maven-assembly-plugin配置插件管理,并让要调用该插件的项目引用它。
因此,在您的父POM中,您将拥有以下内容:
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>${main.class}</mainClass>
</manifest>
</archive>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>这为maven-assembly-plugin声明了一个管理部分。为了让模块使用这一点,您需要在子POM中使用以下内容:
<properties>
<main.class>MyMainClass</main.class>
</properties>
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
</plugin>
</plugins>
</build>这表明模块将引用父POM中的管理部分。在本例中,Maven将正确地使用build属性main.class。
对于不调用该插件的模块,只需省略maven-assembly-plugin的插件声明,就不会发生任何事情。
https://stackoverflow.com/questions/35395785
复制相似问题