1

我正在尝试将我的项目从 java 8 迁移到 java 11。我在 root 中做了什么pom.xml

  1. 更换
<source>8</source>
<target>8</target>

<release>11</release>
  1. 配置的 maven-toolchain-plugin
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-toolchains-plugin</artifactId>
                <version>3.0.0</version>
                <executions>
                    <execution>
                        <phase>validate</phase>
                        <goals>
                            <goal>toolchain</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <toolchains>
                        <jdk>
                            <version>[11,12)</version>
                        </jdk>
                    </toolchains>
                </configuration>
            </plugin>

之后,不使用 groovy 的模块编译没有问题。但是这个项目中很少有模块使用 groovy。

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>${maven-compiler-plugin.version}</version>
                <configuration>
                    <compilerId>groovy-eclipse-compiler</compilerId>
                </configuration>
                <dependencies>
                    <dependency>
                        <groupId>org.codehaus.groovy</groupId>
                        <artifactId>groovy-eclipse-compiler</artifactId>
                        <version>3.6.0-03</version>
                    </dependency>
                    <dependency>
                        <groupId>org.codehaus.groovy</groupId>
                        <artifactId>groovy-eclipse-batch</artifactId>
                        <version>3.0.3-01</version>
                    </dependency>
                </dependencies>
            </plugin>

我收到以下错误:

[INFO] Using Groovy-Eclipse compiler to compile both Java and Groovy files
[DEBUG] Compiling 15 source files to D:\Projects\dxcore-java11\fix-markets\fix-server-tests\target\classes
[DEBUG] Command line options:
[DEBUG] -cp D:\Projects\dxcore-java11\fix-markets\target\classes;C:\Users\turbanov\.m2\repository\org\codehaus\groovy\groovy\3.0.3\groovy-3.0.3.jar;<a_lot_of_jars_here>; -d D:\Projects\dxcore-java11\fix-markets\target\classes -s D:\Projects\dxcore-java11\fix-markets\target\generated-sources\annotations -g -encoding UTF8 --release 11 -nowarn D:\Projects\dxcore-java11\fix-markets\src\client\TestClient.groovy
[INFO] Using Groovy-Eclipse compiler to compile both Java and Groovy files
[DEBUG] Compiling 15 source files to D:\Projects\dxcore-java11\fix-markets\fix-server-tests\target\classes
[INFO] Compiling in a forked process using C:\Users\turbanov\.m2\repository\org\codehaus\groovy\groovy-eclipse-batch\3.0.3-01\groovy-eclipse-batch-3.0.3-01.jar
[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR : 
[INFO] -------------------------------------------------------------
[ERROR] Failure executing groovy-eclipse compiler:
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project fix-server-tests: Compilation failure
Failure executing groovy-eclipse compiler:
option --release is supported only when run with JDK 9 or above


    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:215)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:156)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:148)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
    at org.apache.maven.lifecycle.internal.builder.multithreaded.MultiThreadedBuilder$1.call (MultiThreadedBuilder.java:190)
    at org.apache.maven.lifecycle.internal.builder.multithreaded.MultiThreadedBuilder$1.call (MultiThreadedBuilder.java:186)
    at java.util.concurrent.FutureTask.run (FutureTask.java:266)
    at java.util.concurrent.Executors$RunnableAdapter.call (Executors.java:511)
    at java.util.concurrent.FutureTask.run (FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:624)
    at java.lang.Thread.run (Thread.java:748)
Caused by: org.apache.maven.plugin.compiler.CompilationFailureException: Compilation failure

我的配置有什么问题?groovy-eclipse-compiler支持这样的配置吗?

奇怪的是,如果我更换<release>回来使用<source>11</source>/<target>8</target>一切都很好。

4

2 回答 2

0

正如@emiles 上面评论的那样:

是的,经过一些研究,我现在看到 groovy-eclipse-compiler 不支持工具链。我创建了这个 github 问题来跟踪此功能的添加:github.com/groovy/groovy-eclipse/issues/1232

他在 3 月 13 日将修复程序放入 groovy-eclipse-compiler 3.7.0。我在 AEM 构建中遇到了同样的问题,在安装了 JDK8 和 JDK11 的 AEM Cloud Manager 安装上编译 groovy,使用 maven-toolchains-plugin 进行切换。

升级到 groovy-eclipse-compiler 3.7.0 和 groovy-eclipse-batch 3.0.7-02 为我解决了这个问题。

于 2021-03-17T21:12:01.827 回答
0

我正在尝试将我的项目从 java 8 迁移到 java 11。

我想使用新的语言特性和新的 API。

这种迁移最简单的解决方案是使用 Java 11 进行 Maven 调用。maven-toolchains-plugin在这种情况下无需使用。

至于报告的错误-发布新版本的 Groovy Eclipse Maven 插件以支持 Java 11问题groovy-eclipse-compiler中的每个示例都使用这样的显式配置:maven-compiler-plugin

<plugin>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
        <source>11</source>
        <target>11</target>
    </configuration>
</plugin>

或者像这样的隐式配置:

<properties>
    <maven.compiler.source>11</maven.compiler.source>
    <maven.compiler.target>11</maven.compiler.target>
</properties>

我建议遵循这些示例并<release>完全放弃配置。

另一个建议是使用maven-enforcer-plugin强制执行用于 Maven 调用的 Java 的最低版本

于 2021-03-12T17:13:21.030 回答