標籤:
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.02 Built-By: jimmy3 Build-Jdk: 1.7.0_094 Class-Path: lib/DataEntity-1.0.jar ...5 Created-By: Apache Maven 3.2.36 Main-Class: ctas.importer.reader.app.Program7 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
maven: 打包可啟動並執行jar包(java application)及依賴項處理