天天看點

java工程打成jar包 - 使用maven assembly插件打包及手動打包

在java工程打包的過程中遇到過不少問題,現在總結一下。一種是典型的maven工程打包,依賴的jar包全都在pom.xml中指定,這種方式打包很友善;另一種是依賴了本機jar包(不能通過pom.xml指定),我目前實踐結果是隻能手動進行打包。

1、依賴的jar包全由pom檔案指定

使用maven的assembly插件進行打包,需要在pom檔案中進行插件配置。基本配置如下,在終端中執行mvn package,即可在target目錄生成名字為{artifactId}-jar-with-dependencies.jar 的jar檔案,該jar檔案中包含了所有依賴的jar包(解壓後的)。

該插件還有很多其他的進階設定,每每總是搞錯,後面等自己摸透了,會慢慢增加一些進階設定的說明。

<plugins>
     <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-assembly-plugin</artifactId>
         <version>2.5</version>
         <configuration>
             <descriptorRefs>
                 <descriptorRef>jar-with-dependencies</descriptorRef>
             </descriptorRefs>
             <archive>
                 <manifest>
                     <mainClass>com.sym.storm.WordCountTopology</mainClass>
                 </manifest>
             </archive>
         </configuration>
         <executions>
             <execution>
                 <id>make-assembly</id>
                 <phase>package</phase>
                 <goals>
                     <goal>single</goal>
                 </goals>
             </execution>
         </executions>
     </plugin>
 </plugins>      

最終生成的jar包中的依賴的jar包都是解壓後的,這是由jar-with-dependencies的預設設定決定的。若需要保持依賴的jar包不解壓,則需要進行一下設定:

  • 建立src/main/assembly目錄,并在其中建立src.xml檔案,并在該檔案中寫入如下内容:
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"  
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">  
  <id>jar-with-dependencies</id>  
  <formats>  
    <format>jar</format>  
  </formats>  
  <includeBaseDirectory>false</includeBaseDirectory>  
  <dependencySets>  
    <dependencySet>  
      <unpack>false</unpack>  
      <scope>runtime</scope>  
    </dependencySet>  
  </dependencySets>  
  <fileSets>  
    <fileSet>  
      <directory>${project.build.outputDirectory}</directory>  
    </fileSet>  
  </fileSets>  
</assembly>        

預設的unpack設定是true(即解壓),隻需要修改為false即可。

  • 然後需要将之前pom檔案中的descriptorRef替換為如下descriptor設定。再執行mvn package指令。解壓生成的jar包,可看到依賴的jar包都是未解壓的。
  • <descriptors>
      <descriptor>jar-with-dependencies</descriptorRef>
    </descriptors>      

2、依賴本地jar包(非pom指定)

之前在網上搜了很多的教程,教程裡也有很多是使用assembly插件來,但實踐之後都未果,後來隻能用最原始的手動導jar包的方式來實作。

  • 用編輯器導成jar包(eclipse和intellij不同)。Main方法根據實際需求來指定。
  • 修改MANIFEST.MF。MANIFEST.MF檔案描述了jar包的相關資訊,包括jar包的版本、建立人和類搜尋路徑等。如果是可執行jar包,會包含Main-Class屬性,表明Main方法入口。Class-Path指定依賴的jar包,目前路徑是jar包所在目錄,若要引用目前目錄下一個子目錄中的jar包,使用以下格式:子目錄/jar包名稱,多個jar包之間用空格分隔,在任何平台上路徑分割符都是'/'。

具體操作如下:在導出的jar包上右鍵,選擇用WinRAR打開,進入META_INF目錄,打開MANIFEST.MF檔案,添加依賴的jar包的名字,名字之前用空格分隔,如

Class-Path: lib/***1.jar lib/***2.jar

轉載于:https://www.cnblogs.com/yaminLearn/p/6273972.html