2015-05-08 51 views
1

我有一個項目,生成一些類和資源,然後應打包成一個罐子。如何使用maven生成代碼並將其打包而不依賴?

生成的類有幾個依賴關係。生成的類沒有依賴關係。

我最初的解決方案是使用maven assembly插件只包含生成的文件。不幸的是,打包的pom包含了生成所需的所有依賴。這個jar的消費者引入了一堆不必要的依賴關係。

我看着maven shade插件。我編譯一次,用mojo的exec插件運行generator類,編譯最後一次。然後陰影當然在包裝階段運行。它創建了一個dependency-reduced-pom.xml而沒有過多的依賴關係。所以運行mvn clean package並查看target/foo.jar。我期望meta-inf文件夾中的jar是簡化的依賴jar。但它是完整的pom。我不知道生成的pom如何替換已打包的。

我試過的另一個糟糕的解決方案是使用多個配置文件及其自己的依賴性部分。我使用生成配置文件運行maven一次,然後再使用包裝配置文件運行。這個工作,但很糟糕,因爲你必須運行多個maven命令。這不是詹金斯友好的。

我該怎麼做呢?我應該如何安排一個生成一些代碼和一些文本文件的項目,然後將這些文件打包成一個友好的maven工件?

+0

如何調用你的發電機?從測試?執行:在一個階段的Java?你的發電機組是你的項目的一部分嗎?您的生成器類是否依賴於(編譯時間)項目中的類? –

回答

1

1)一種可能性是使你所有的依賴<optional>true</optional>

該pom仍然有依賴關係,但使用您的庫的項目不會嘗試下載它們。

2)使用plugin dependencies與exec插件。

如果在另一個項目中定義了生成器類,那麼效果很好。

理想情況下,您可以使用插件調用您的生成器,並避免將這些依賴項添加到您的項目中。這可能不值得做,這取決於你的項目是什麼,以及你的發電機的可重用性如何。

3)如果您使用的是maven-shade-plugin,則通常使用dependency-reduced-pom.xml。檢查您的.m2存儲庫以查看當您執行mvn install時複製的pom的內容。它的內容很可能與dependency-reduced-pom.xml

+0

我對安裝的pom來自哪裏有錯誤的想法。我認爲使用了包裝在罐子裏的那個。相反,在使用陰影時,它確實是'dependency-reduced-pom.xml'。 – djeikyb

相關問題