无法使用Java高于1.8的maven-compiler-plugin进行编译

问题描述 投票:2回答:1

我有一个基于NetBeans maven的项目,我想从Java 1.8切换到12但我无法编译它。

经过多次尝试,我决定从头开始,创建一个非常简单的项目来了解如何进行此更改。

好吧,我已经尝试过,我也无法编译这个简单的项目。

有人能解释我做错了吗?

前言

NetBeans:10.0

JAVA_HOME:C:\ Program Files \ Java \ jdk-12(我也试过了9,10,11)

胃:Console output of Maven

项目创建

  1. 使用窗口创建项目(第一个TopComponent)

Netbeans display window

  1. 我将JDK版本从11(NetBeans 10.0中的默认值)更改为12

Project properties in NetBeans

  1. 这是自动生成的POM和javax.annotation-api依赖项 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>it.prj</groupId> <artifactId>Project-parent</artifactId> <version>2.9</version> </parent> <artifactId>Project-source</artifactId> <packaging>nbm</packaging> <build> <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>nbm-maven-plugin</artifactId> <extensions>true</extensions> <configuration> <useOSGiDependencies>true</useOSGiDependencies> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <configuration> <useDefaultManifestFile>true</useDefaultManifestFile> </configuration> </plugin> </plugins> </build> <dependencies> <dependency> <groupId>org.netbeans.api</groupId> <artifactId>org-netbeans-api-annotations-common</artifactId> <version>${netbeans.version}</version> </dependency> <dependency> <groupId>org.netbeans.api</groupId> <artifactId>org-openide-windows</artifactId> <version>${netbeans.version}</version> </dependency> <dependency> <groupId>org.netbeans.api</groupId> <artifactId>org-openide-util</artifactId> <version>${netbeans.version}</version> </dependency> <dependency> <groupId>org.netbeans.api</groupId> <artifactId>org-openide-util-ui</artifactId> <version>${netbeans.version}</version> </dependency> <dependency> <groupId>org.netbeans.api</groupId> <artifactId>org-openide-util-lookup</artifactId> <version>${netbeans.version}</version> </dependency> <dependency> <groupId>org.netbeans.api</groupId> <artifactId>org-openide-awt</artifactId> <version>${netbeans.version}</version> </dependency> <dependency> <groupId>org.netbeans.api</groupId> <artifactId>org-netbeans-modules-settings</artifactId> <version>${netbeans.version}</version> </dependency> <dependency> <groupId>javax.annotation</groupId> <artifactId>javax.annotation-api</artifactId> <version>1.3.2</version> <type>jar</type> </dependency> </dependencies> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties>
  2. 然后我开始Clean&Build> SUCCESS
  3. 我将Java版本从1.7更改为12

Changing java version in properties

这将相关的插件添加到POM

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.3.2</version>
            <configuration>
                <source>12</source>
                <target>12</target>
            </configuration>
        </plugin>
  1. 更新版本字段,使其变为: <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.0</version> <configuration> <source>12</source> <target>12</target> </configuration> </plugin>
  2. 然后我重新启动Clean&Build> FAILED cd D:\Project\Project-source; "JAVA_HOME=C:\\Program Files\\Java\\jdk-12" "M2_HOME=C:\\Program Files\\apache-maven-3.6.0" cmd /c "\"\"C:\\Program Files\\apache-maven-3.6.0\\bin\\mvn.cmd\" -Dmaven.ext.class.path=\"C:\\Program Files\\Netbeans 10.0\\java\\maven-nblib\\netbeans-eventspy.jar\" -Dfile.encoding=UTF-8 clean install\"" 建设项目源2.9 --- maven-clean-plugin:2.5:clean(default-clean)@Project-source ---

删除D:\ Project \ Project-source \ target

--- maven-resources-plugin:3.1.0:resources (default-resources) @ Project-source ---

Using 'UTF-8' encoding to copy filtered resources.
Copying 1 resource

--- maven-compiler-plugin:3.8.0:compile (default-compile) @ Project-source ---
Changes detected - recompiling the module!
Compiling 1 source file to D:\Project\Project-source\target\classes

--- nbm-maven-plugin:4.1:manifest (default-manifest) @ Project-source ---
NBM Plugin generates manifest
Adding OSGi bundle dependency - javax.annotation:javax.annotation-api
------------------------------------------------------------------------
BUILD FAILURE
------------------------------------------------------------------------
Failed to execute goal org.codehaus.mojo:nbm-maven-plugin:4.1:manifest (default-manifest) on project Project-source: 
Execution default-manifest of goal org.codehaus.mojo:nbm-maven-plugin:4.1:manifest failed.: IllegalArgumentException 

编辑

  1. 我试图删除nbm-maven-plugin,但是这改变了Project的结构,我不知道如何重新包含这个模块

enter image description here

java maven java-8 maven-plugin maven-compiler-plugin
1个回答
2
投票

在你的例子中nbm-maven-plugin失败但编译过程很好。

暂时从你的构建中删除nbm-maven-plugin,看看Maven是否可以在没有它的情况下构建。也许您可以完全跳过此插件,因为它似乎仅适用于NetBeans IDE。


2
投票

请使用这样的4.2版本:

<groupId>org.apache.netbeans.utilities</groupId>
<artifactId>nbm-maven-plugin</artifactId>
<version>4.2</version>

替换任何引用:

 <groupId>org.codehaus.mojo</groupId>
 <artifactId>nbm-maven-plugin</artifactId>

由jdk> 8生成的jar文件无法通过旧版本的插件进行解析。

© www.soinside.com 2019 - 2024. All rights reserved.