2014-01-22 17 views
3

我使用maven來構建我的jar(Intellij IDEA IDE)。它是使用Apache Camel構建的應用程序。從我的pom.xml的摘錄:apache駱駝 - 打包一個可執行的jar

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-jar-plugin</artifactId> 
    <configuration> 
     <archive> 
      <manifest> 
       <mainClass>MainDriver</mainClass> 
      </manifest> 
     </archive> 
    </configuration> 
</plugin> 

我能夠檢索行家,但在運行的所有jar文件我是NoClassDeFFound錯誤。

最後,我試過使用單罐插件(http://one-jar.sourceforge.net/)。我已經有了它的工作。我的問題是我可以在不使用單罐的情況下實現同樣的目標嗎?我不喜歡單罐的包裝,它的功能是當你從單罐中提取罐子時,你會發現你的罐子裏有罐子,所以你需要在罐子上做一個額外的提取以獲得到你的課程/資源。我的配置文件在資源上,不時需要修改。

謝謝!

+0

單罐插件是很好的避免附加在陰影插件指定的東西,就像在Ralf答案(這是很好的順便說一句)。無論如何,我會考慮將這些配置文件完全外化,而不是使用類路徑中的資源。駱駝屬性可以從各種協議和位置指定,就像Spring的一樣。 – Tome

回答

7

maven-shade-plugin創建一個包含應用程序代碼的jar文件,並將所有依賴項合併到一個jar文件中。這種方法的問題是您需要決定如何處理名稱衝突的文件。這是我們用來爲我們的Camel應用程序構建可執行JAR的配置,包括Spring和所有必需的依賴關係。

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-shade-plugin</artifactId> 
    <version>1.5</version> 
    <configuration> 
     <transformers> 
      <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> 
       <mainClass>org.apache.camel.spring.Main</mainClass> 
      </transformer> 
      <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> 
       <resource>META-INF/spring.handlers</resource> 
      </transformer> 
      <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> 
       <resource>META-INF/spring.schemas</resource> 
      </transformer> 
      <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> 
       <resource>META-INF/spring.tooling</resource> 
      </transformer> 
      <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> 
       <resource>META-INF/cxf/bus-extensions.txt</resource> 
      </transformer> 
      <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/> 
      <transformer implementation="org.apache.maven.plugins.shade.resource.DontIncludeResourceTransformer"> 
       <resource>META-INF/INDEX.LIST</resource> 
      </transformer> 
      <transformer implementation="org.apache.maven.plugins.shade.resource.DontIncludeResourceTransformer"> 
       <resource>META-INF/MSFTSIG.SF</resource> 
      </transformer> 
      <transformer implementation="org.apache.maven.plugins.shade.resource.DontIncludeResourceTransformer"> 
       <resource>META-INF/MSFTSIG.RSA</resource> 
      </transformer> 
     </transformers> 
    </configuration> 
    <executions> 
     <execution> 
      <phase>package</phase> 
      <goals> 
       <goal>shade</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 
+0

試過這個並且工作正常。謝謝! – lorraine