2012-10-12 140 views
1

我試圖捆綁一個java檔案(JAR)與自包含的所有依賴關係。首先,我嘗試使用maven assembly plugin,雖然這是缺少一些類。 jar-with-dependencies documentation建議使用maven-shade-plugin,最終會丟失不同的類。我認爲發生的事情是使用相同包名的多個依賴似乎被跳過,所以像slf4j這樣的東西會被跳過。難以創建一個超級罐子

我真的更喜歡打包的jar包含庫自包含而不是重新打包它們。

我幾乎放棄了,並認爲我只是使用bin descriptor for the assembly plugin,它只能壓縮jar本身,沒有依賴關係。

注意:我知道其他人已經問過類似的問題,這些問題導致了使用陰影/彙編插件的建議,但沒有一個說明我遇到的具體問題。

UPDATE:請求khmarbaise以下顯示一個POM,其中所有類都跳過。請注意,還有另一個JAR使用相同的包結構,但是是本地化的bundle,包含本地化的bundle但省略了所有的類。

<?xml version="1.0"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
          http://maven.apache.org/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.ddtek</groupId> 
    <artifactId>openedge</artifactId> 
    <packaging>jar</packaging> 
    <version>10.1C04</version> 
    <name>openedge</name> 
    <url>http://progress.com</url> 
    <dependencies> 
    <dependency> 
     <groupId>com.ddtek</groupId> 
     <artifactId>base</artifactId> 
     <version>10.1C04</version> 
    </dependency> 
    <dependency> 
     <groupId>com.ddtek</groupId> 
     <artifactId>util</artifactId> 
     <version>10.1C04</version> 
    </dependency> 
    </dependencies> 
</project> 

請注意,上述POM是第三方庫,不會發布到maven,只存在於我們的本地nexus回購。

+1

顯示pom並描述錯過了哪些課程? – khmarbaise

+0

我有一個類似的問題,並會對其解決方案感興趣,因爲我無法找到滿意的解決方案。在附註中,你有什麼打算把所有東西放在一個罐子裏? –

回答

1

如果沒有預定義的描述符符合您的需求,您可以編寫自己的程序集。

來包括依賴關係,您可以指定像

<dependencySets> 
    <dependencySet> 
     <outputDirectory>/lib</outputDirectory> 
     <useProjectArtifact>false</useProjectArtifact> 
     <useTransitiveDependencies>true</useTransitiveDependencies> 
     <unpack>false</unpack> 
     <scope>runtime</scope> 
    </dependencySet> 
    </dependencySets> 

,並在你的POM是這樣的:

<plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-assembly-plugin</artifactId> 
     <version>2.3</version> 
     <configuration> 
      <descriptors> 
      <descriptor>assembly.xml</descriptor> 
      </descriptors> 
     </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> 

,然後自定義,下面您的要求。