maven: 打包可運行的jar包(java application)及依賴項處理


IDE環境中,可以直接用exec-maven-plugin插件來運行java application,類似下面這樣:

 1 <plugin>
 2     <groupId>org.codehaus.mojo</groupId>
 3     <artifactId>exec-maven-plugin</artifactId>
 4     <version>1.2.1</version>
 5     <executions>
 6         <execution>
 7             <goals>
 8                 <goal>exec</goal>
 9             </goals>
10         </execution>
11     </executions>
12     <configuration>
13         <executable>java</executable>
14         <arguments>
15             <argument>-classpath</argument>
16             <classpath>
17             </classpath>
18             <argument>ctas.importer.reader.app.Program</argument>
19         </arguments>
20     </configuration>
21 </plugin>

18行,改成自己的Main-Class類,然后用mvn exec:exec來運行,但是部署到生產環境中時,服務器上通常並不具備maven環境,只能用 java -jar xxx.jar這種方式來運行,下面是一些處理細節:

 

一、依賴項的處理

java application運行時需要查找依賴的第三方jar,如果查找classpath失敗,就會報錯,可以先用

mvn dependency:copy-dependencies -DoutputDirectory=target/lib

命令,把依賴的jar包全部導出到target/lib這個目錄下

 

二、利用maven-jar-plugin修改META-INF\MANIFEST.MF 清單文件

java application的最終jar里,用解壓工具打開后,可以看到META-INF目錄下,有一個重要的清單文件 MANIFEST.MF,這里面可以指定 Main-Classclasspath,結構如下:

1 Manifest-Version: 1.0
2 Built-By: jimmy
3 Build-Jdk: 1.7.0_09
4 Class-Path: lib/DataEntity-1.0.jar ...
5 Created-By: Apache Maven 3.2.3
6 Main-Class: ctas.importer.reader.app.Program
7 Archiver-Version: Plexus Archiver

其中第4行指定了classpath,也就是所依賴的jar包在什么地方,第6行表示main函數的入口類,默認情況下mvn clean package生成的jar包里,清單文件上並沒有這2行,需要在pom.xml中添加插件

 1 <plugin>
 2     <groupId>org.apache.maven.plugins</groupId>
 3     <artifactId>maven-jar-plugin</artifactId>
 4     <configuration>
 5         <archive>
 6             <manifest>
 7                 <mainClass>ctas.importer.reader.app.Program</mainClass>
 8                 <addClasspath>true</addClasspath>
 9                 <classpathPrefix>lib/</classpathPrefix>
10             </manifest>
11         </archive>
12         <classesDirectory>
13         </classesDirectory>
14     </configuration>
15 </plugin>

第7行指定Main-Class,第9行指定classpath的相對路徑,這樣mvn package后,清單文件里就會自動添加Main-Class和Class-Path這二項

ok了,部署時把jar包和lib目錄,都上傳到服務器上 ,然后測試一下,順利的話 java -jar  xxx.jar就可以了,如果要在后台運行,前面加 nohup

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM