我害怕聽到答案很可能將被「拆分項目」但在這裏不用...如何讓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