專案打jar包保留引數名及可執行專案打jar包指定入口類和第三方依賴等
1. 專案打jar包保留引數名(jdk8)
JDK8之後程式碼編譯就可以保留引數名了,不再顯示為arg0,arg1...,但JDK8編譯預設還是不保留引數名的,需要手動開啟;
那麼應該如何打jar包保留引數名呢?
(1) 命令列編譯某個java檔案到class:
不保留引數名:
javac Test.java
保留引數名:
javac -parameters Test.java
(2) IDE設定打包maven專案保留引數
IDEA設定:
File->Settings->Build,Execution,Deployment->Java Compiler下的Additional command line parameters 框中新增-parameters。
Eclipse:
Preferences->java->Compiler 勾選Store information about method parameters選項
(3) Maven中配置:
<build> <defaultGoal>install</defaultGoal> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.5.1</version> <configuration> <source>1.8</source> <target>1.8</target> <encoding>UTF8</encoding> <compilerArgs> <arg>-parameters</arg> </compilerArgs> </configuration> </plugin> </plugins> </build>
然後執行clean package即可打包成功,反射可直接解析獲取;
2. 可執行專案打jar包指定入口類和第三方依賴等
關於可執行程式(需要指定一個 main 類<啟動類>,springboot)打jar包,我們需要考慮以下幾個問題:
配置檔案需要打進 jar 包;(只要你專案配置檔案都按照 maven 規範放在src/main/resources下,那麼打好的 jar 包就會把它們一起打包:)
需要指定 main 入口類;
所依賴的第三方庫也要打進 jar 包;
然後才能使用java -jar xxx-0.0.1.jar 執行該程式;
要正確把第三方依賴打入jar並且在META-INF 目錄中的 MANIFEST.MF檔案中生成Main-Class屬性,我們採用maven-shade- plugin 外掛;
pom中配置如下:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF8</encoding>
<compilerArgs>
<arg>-parameters</arg>
</compilerArgs>
</configuration>
</plugin>
<!-- 打成jar包 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.4.1</version>
<configuration>
<!-- 是否生成縮減的pom檔案,預設不配置是true -->
<createDependencyReducedPom>false</createDependencyReducedPom>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<!-- 啟動類 -->
<mainClass>com.alibaba.dubbo.demo.impl.Provider</mainClass>
</transformer>
<transformer
implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.handlers</resource>
</transformer>
<transformer
implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.schemas</resource>
</transformer>
</transformers>
<!--打包依賴檔案的輸出路徑-->
<outputDirectory>
${project.build.directory}/lib
</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
然後執行clean package完成;
此時執行java -jar xxxx-0.0.1.jar即可成功執行