簡體   English   中英

將 Maven 插件升級到 Java 11

[英]Upgrading Maven plugins to Java 11

我正在將我的 Maven 構建的 Java 8 應用程序升級到 Java 11。在我的 POM 中,我指定:

<properties>
  <java.version>1.11</java.version>
  <maven.compiler.source>${java.version}</maven.compiler.source>
  <maven.compiler.target>${java.version}</maven.compiler.target>
</properties>

當我使用正常的 Maven 構建調用來構建我的應用程序時:

mvn verify -Plocal -Dspring-boot.run.jvmArguments="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005"

我得到:

[INFO] Scanning for projects...
[INFO] 
[INFO] -----------------------< example.com:myapp-svc >------------------------
[INFO] Building myapp-svc 1
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- maven-checkstyle-plugin:3.1.2:check (validate) @ myapp-svc ---
[WARNING] Old version of checkstyle detected. Consider updating to >= v8.30
[WARNING] For more information see: https://maven.apache.org/plugins/maven-checkstyle-plugin/examples/upgrading-checkstyle.html
[INFO] Starting audit...
Audit done.
[INFO] You have 0 Checkstyle violations.
[INFO] 
[INFO] --- jacoco-maven-plugin:0.8.7:prepare-agent (default) @ myapp-svc ---
[INFO] argLine set to -javaagent:/Users/myuser/.m2/repository/org/jacoco/org.jacoco.agent/0.8.7/org.jacoco.agent-0.8.7-runtime.jar=destfile=/Users/myuser/workspace/myapp-svc/target/jacoco.exec
[INFO] 
[INFO] --- maven-resources-plugin:3.1.0:resources (default-resources) @ myapp-svc ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 6 resources
[INFO] Copying 154 resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.8.1:compile (default-compile) @ myapp-svc ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 456 source files to /Users/myuser/workspace/myapp-svc/target/classes
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  3.076 s
[INFO] Finished at: 2021-11-12T12:52:52-05:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project myapp-svc: Fatal error compiling: error: invalid target release: 1.11 -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException

所以看起來maven-compiler-plugin:3.8.1插件與 Java 11 不兼容。問題是,我沒有在 POM 的任何地方直接指定該插件。 所以什么東西,冥冥中牽引它並使用它,我的猜測是,我要更新什么件事是如此,它在拉一個版本的maven-compiler-plugin與Java兼容11。

那么我怎么知道是什么在吸引它並使用它呢? 或者,如果這不是正在發生的事情,那是什么,我該如何解決?

<java.version>1.11</java.version>替換為<java.version>11</java.version>

Java 9+ 中的新版本控制方案

Java 9及更高版本開始,Java 版本編號方案已更改以刪除永遠不變的1.*

有關官方文檔和解釋,請參閱JEP 223: New Version-String Scheme 的版本號中刪除初始 1 元素部分。

引用 JEP 223:

該提案從 JDK 版本號中刪除了最初的 1 元素。 也就是說,它表明 JDK 9 的第一個版本將具有版本號 9.0.0 而不是 1.9.0.0。

近二十年后,很明顯當前版本號方案的第二個元素是 JDK 的事實上的$MAJOR版本號。

因此你的 POM 應該使用:

<java.version>11</java.version>

<maven.compiler.release>

順便說一句,如果您將 POM 中與編譯器、構建和測試相關的其他部分更新為最新版本,您可以將<maven.compiler.source><maven.compiler.target>元素替換為只是這一個元素: <maven.compiler.release>

所以你的片段:

<properties>
  <java.version>1.11</java.version>
  <maven.compiler.source>${java.version}</maven.compiler.source>
  <maven.compiler.target>${java.version}</maven.compiler.target>
</properties>

……變成這樣:

<properties>
  <java.version>11</java.version>
  <maven.compiler.release>${java.version}</maven.compiler.release>
</properties>

在我自己的工作中,我什至根本沒有java.version元素。 我只使用這個片段,將UTF-8指定為字符編碼,將 Java 17 指定為編譯和構建版本。

  <properties>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      <maven.compiler.release>17</maven.compiler.release>
  </properties>

這是我修改后的Apache Maven Quickstart Archetype 版本,作為一個完整的例子。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM