Maven 常用技巧總結


Maven 常用技巧總結

1. 設置 Java JDK 的版本為「JDK 1.8」

可以修改 pom.xml 添加如下語句實現使用 Java 8 語言特性,共有兩種方式,可任選其一:

1.1 添加 property

<code><project>
[...]
<properties>
<maven.compiler.source>1.8/<maven.compiler.source>
<maven.compiler.target>1.8/<maven.compiler.target>
/<properties>
[...]
/<project>/<code>

1.2 直接配置插件

<code><project>
[...]
<build>
[...]
<plugins>
<plugin>
<groupid>org.apache.maven.plugins/<groupid>
<artifactid>maven-compiler-plugin/<artifactid>
<version>3.6.1/<version>
<configuration>
<source>1.8/<source>
<target>1.8/<target>
/<configuration>
/<plugin>
/<plugins>
[...]
/<build>
[...]
/<project>/<code>

2. Maven 構建生成可執行的 Jar

2.1 簡單構建可執行的 Jar

<code><project> 

[...]
<build>
[...]
<plugins>
<plugin>
<artifactid>maven-assembly-plugin/<artifactid>
<version>3.0.0/<version>
<configuration>
[...]
<archive>
<manifest>
<mainclass>org.sample.App/<mainclass>
/<manifest>
/<archive>
/<configuration>
[...]
/<plugin>
[...]
/<plugins>/<build>/<project>/<code>

此時可使用如下命令構建可執行 Jar

<code>mvn assembly:single/<code>

2.2 將 Assembly 的 single 目標綁定到項目的構建生命週期中

可在 pom.xml 文件中添加如下內容:

<code><project>    
[...]
<build>
[...]
<plugins>
<plugin>
<artifactid>maven-assembly-plugin/<artifactid>
<version>3.0.0/<version>
<configuration>

<appendassemblyid>true/<appendassemblyid>

<archive>
<manifest>
<mainclass>cc.bitky.fx.Main/<mainclass>
/<manifest>

/<archive>

<descriptorrefs>
<descriptorref>jar-with-dependencies/<descriptorref>
/<descriptorrefs>
/<configuration>
<executions>
<execution>
make-assembly

<phase>package/<phase>

<goals>
<goal>single/<goal>
/<goals>
/<execution>
/<executions>
/<plugin>
/<plugins>
[...]
/<build>
/<project>/<code>

之後,為了生成項目的 Jar 文件,可以簡單地執行如下生命週期階段命令:

<code>mvn package/<code>

構建完畢後,可以看到已經生成了類似於以下名字的文件:

<code>target / sample-1.0-SNAPSHOT-jar-with-dependencies.jar

target / sample-1.0.jar/<code>

appendAssemblyId: 控制是否在已生成的文件的文件名中包含「ssembly id」。

execution: 用於將 maven-assembly-plugin 集成至標準的 Maven 構建生命週期中,此時執行 maven package 時就會執行指定的操作,從而實現自定義打包。

2.3 Assembly 插件的 Maven Goals

  • assembly:assembly: 「已棄用」會自動執行 package 生命週期。
  • assembly:single: 僅會裝配成 jar-with-dependencies,我們不想讓 package 階段運行兩次 package,所以配置為這個。

3. 可執行 Jar 文件執行時出現亂碼

使用 Maven 生成的可執行 Jar 文件,在 cmd 中執行時出現亂碼,項目編碼統一為 UTF-8,日誌使用 SLF4J 框架。

3.1 方法 1:windows 默認使用 GBK 編碼,執行 Jar 時動態指定編碼

運行 java -jar 命令時添加參數

<code>-Dfile.encoding=UTF-8 /<code>

格式如下:

<code>java -jar -Dfile.encoding=UTF-8 simpler.jar /<code>

或添加環境變量:

<code>JAVA_TOOL_OPTIONS = -Dfile.encoding=UTF-8/<code>

3.2 使用臨時的活動代碼頁運行

在控制檯執行命令:

<code>chcp 65001/<code>

可將當前 cmd 的編碼臨時變為 UTF-8,執行 chcp 命令可顯示當前 cmd 的編碼。

4. Maven 中讀取資源文件

在 Maven 項目的根目錄下,有如下必要的目錄結構:

src main resources「存放一些資源文件」 java test resources「存放一些資源文件」 java pom.xml

在項目的 compile 時期,所有的資源文件和 .class 文件均被複制到 target/classes/ 目錄中,獲取資源文件,可參考如下語句:

<code>1. this.getClass().getResource("")
//得到的是當前類 class 文件所在的目錄 URL。

2. this.getClass().getResource("/")
3. this.getClass().getClassLoader().getResource("")
4. ClassLoader.getSystemResource("")
5. Thread.currentThread().getContextClassLoader().getResource("")
//得到的是當前 ClassPath 的絕對 URI 路徑。/<code>

所以,如若想要獲取 resources 文件夾中的資源文件 ky.xml,可使用如下語句之一:

<code>getClass().getClassLoader().getResource("ky.xml")
getClass().getResource("/ky.xml")/<code>


分享到:


相關文章: