2017-03-27 51 views
1

我正在嘗試創建一個程序集(即可運行的jar),並且希望將所有的外部jar包含在我的程序集中,而不是來自「jar」格式的類外部jar被取出併成爲我的「可運行」jar文件的一部分。 我已經嘗試在程序集文件中使用「解壓縮」選項(將其設置爲false),但它會創建其他問題,例如,它不會爲我的項目生成CLASS文件,更不用說包括處理外部jar文件。所以我肯定做錯了什麼。 幫助將不勝感激。 POM和ASSEMBLY信息如下。 謝謝Maven Assembly with external jar's

這是從我的POM文件中的一個片段。

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <configuration> 
     <descriptors> 
      <descriptor>src/assembly/assemblyinfo.xml</descriptor> 
     </descriptors> 
     <archive> 
      <manifest> 
       <mainClass>com.company.sample</mainClass> 
      </manifest> 
     </archive> 
    </configuration> 
    <executions> 
     <execution> 
      <phase>package</phase> 
      <goals> 
       <goal>single</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin>   

這裏是assemblyinfo.xml

<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.0.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.0.0     http://maven.apache.org/xsd/assembly-2.0.0.xsd"> 
    <id>FULL</id> 
    <formats> 
    <format>jar</format> 
    </formats> 
    <includeBaseDirectory>false</includeBaseDirectory> 
    <dependencySets> 
    <dependencySet> 
     <outputDirectory>/</outputDirectory> 
     <useProjectArtifact>true</useProjectArtifact> 
     <unpack>true</unpack> 
     <scope>runtime</scope> 
    </dependencySet> 
    </dependencySets> 
</assembly> 

回答

0
<build> 
     <plugins> 
      <plugin> 
       <artifactId>maven-assembly-plugin</artifactId> 
       <version>2.6</version> 
       <configuration> 
        <descriptorRefs> 
         <descriptorRef>jar-with-dependencies</descriptorRef> 
        </descriptorRefs> 
        <archive> 
         <manifest> 
          <mainClass>com.evermore.talos.services.ttservice.ttstarter.UIStartup</mainClass> 
         </manifest> 
        </archive> 
       </configuration> 
       <executions> 
        <execution> 
         <id>make-assembly</id> <!-- this is used for inheritance merges --> 
         <phase>compile</phase> <!-- bind to the packaging phase --> 
         <goals> 
          <goal>single</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 
      <plugin> 
       <artifactId>maven-resources-plugin</artifactId> 
       <version>2.7</version> 
       <dependencies> 
        <dependency> 
         <groupId>org.apache.maven.shared</groupId> 
         <artifactId>maven-filtering</artifactId> 
         <version>1.3</version> 
        </dependency> 
       </dependencies> 
       <executions> 
        <execution> 
         <id>copy-resources</id> 
         <!-- here the phase you need --> 
         <phase>package</phase> 
         <goals> 
          <goal>copy-resources</goal> 
         </goals> 
         <configuration> 
          <outputDirectory>${basedir}/target/release</outputDirectory> 
          <resources> 
           <resource> 
            <directory>src/main/resources</directory> 
            <filtering>true</filtering> 
           </resource> 
           <resource> 
            <directory>target</directory> 
            <includes> 
             <include>*-dependencies.jar</include> 
            </includes> 
           </resource> 
          </resources> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 

     </plugins> 
    </build> 

普萊舍指這個Maven構建設置。這就是我們如何構建具有所有依賴關係的可執行jar。

+0

謝謝Shineed。感謝您的快速響應。 我試圖避免「jar-with-dependencies」decscriptorRef,原因是我想能夠給我自己的「名稱」的大會。例如,在assemblyinfo.xml中,您看到名稱爲 FULL。它會在jar文件的末尾附加「_FULL」。因此,最終的JAR文件將像MyZookeeperexample_1_FULL.jar而不是「MyZookeeperexample_1_jar -with-dependencies.jar」 – user3221045

+0

另外,當您使用「jar-with-dependency」時,外部JAR將「解壓縮」,這意味着您最終會一堆CLASS文件,這正是我想要避免的。 – user3221045