我害怕听到答案很可能将被“拆分项目”但在这里不用...如何让Maven为同一个项目生产两个罐子?
我有一个项目,我需要现在就输出一个版本的jar文件没有一个log4j的。 xml配置。我认为如果我可以有双重输出会很好:一个jar包含log4j.xml,另一个jar包没有log4j.xml。我讨厌将这个项目拆分为一个文件。我试过Assembly插件,但我不认为我已经想出了正确的配置。
我害怕听到答案很可能将被“拆分项目”但在这里不用...如何让Maven为同一个项目生产两个罐子?
我有一个项目,我需要现在就输出一个版本的jar文件没有一个log4j的。 xml配置。我认为如果我可以有双重输出会很好:一个jar包含log4j.xml,另一个jar包没有log4j.xml。我讨厌将这个项目拆分为一个文件。我试过Assembly插件,但我不认为我已经想出了正确的配置。
在这种关系最好的解决办法 更多信息是不使用配置文件原因型材迫使你运行构建第二次与日Ë启动配置文件,如果你喜欢用释放插件等最简单的解决方法是使用这样的分类器将无法正常工作:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<executions>
<execution>
<id>second-jar</id>
<goals>
<goal>jar</goal>
</goals>
<configuration>
<classifier>without</classifier>
<excludes>
<exclude>**/log4j*</exclude>
</excludes>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
默认绑定这势必package阶段的maven-JAR,插件会创建一个包含log4j.xml文件的jar文件,上面将创建jar文件,但不包含log4j.xml文件,该文件可以通过使用分类器而不是或者您命名它。
这样做,你可以简单的用行家的像一个单一的呼叫建立两个罐子的优势:
mvn clean package
此外,他们将被连接到该项目,将被部署到相应的存储库。
是的,您可以从单个Maven项目创建多个JAR。神器的分类器可以用来区分它们。
Maven构件是由以下部分组成:
默认情况下,分类是空的,但你可以将其设置为“当使用maven-assembly-plugin来排除log4j.xml文件时,nolog4j'。
我会使用配置文件。在不使用log4j.xml的情况下创建默认配置文件和配置文件。调用mvn包& & mvn包-P otherprofile。
您的答案显示为什么使用配置文件不是最佳选择。你需要两次调用maven。 – khmarbaise 2013-05-04 09:09:02
您可以在第二个配置文件像这样配置maven jar plugin
:
<profiles>
<profile>
<id>nolog4j<id>
<build>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<excludes>
<exclude>log4j.xml</exclude>
</excludes>
</configuration>
</plugin>
</build>
</profile>
</profiles>
然后你可以运行mvn package -P nolog4j
,它应该产生相同的罐子,但没有log4j.xml
文件(调整exclude
标签的实际文件路径)在maven jar plugin
发布插件也可以使用'releaseProfiles'配置,以在部署过程中启用多个配置文件。 – Chirlo 2013-05-04 15:29:48
这是行不通的,因为如果你有两个配置文件使用相同的生命周期绑定,并且只有一个会执行相同的执行。除此之外,处理这个问题的最好方法是在没有任何配置文件的情况下运行它。 – khmarbaise 2013-05-04 16:15:24
我正在运行这个没有任何配置文件,它做了我想要的。我做了瓶子的差异,唯一的变化是其中一个没有log4j配置。谢谢! – 2013-05-07 14:55:58