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-Class及classpath,結構如下:
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
文章列表