1. 程式人生 > >專案打jar包保留引數名及可執行專案打jar包指定入口類和第三方依賴等

專案打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即可成功執行