简体   繁体   English

Maven 构建失败 - 编译器插件

[英]Maven Build Failure - Compiler Plugin

I am trying to build a project in Maven and am experiencing the following error:我正在尝试在 Maven 中构建项目,但遇到以下错误:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.0:compile (default-compile) on project webgoat-container: Fatal error compiling: java.lang.ExceptionInInitializerError: Unable to make field private com.sun.tools.javac.processing.JavacProcessingEnvironment$DiscoveredProcessors com.sun.tools.javac.processing.JavacProcessingEnvironment.discoveredProcs accessible: module jdk.compiler does not "opens com.sun.tools.javac.processing" to unnamed module @5d01a2eb -> [Help 1]

The pom.xml of the project is:项目的pom.xml为:

<modelVersion>4.0.0</modelVersion>
<groupId>org.owasp.webgoat</groupId>
<artifactId>webgoat-parent</artifactId>
<packaging>pom</packaging>
<version>8.2.1-SNAPSHOT</version>

<name>WebGoat Parent Pom</name>
<description>Parent Pom for the WebGoat Project. A deliberately insecure Web Application</description>
<inceptionYear>2006</inceptionYear>
<url>https://github.com/WebGoat/WebGoat</url>

<organization>
    <name>OWASP</name>
    <url>https://github.com/WebGoat/WebGoat/</url>
</organization>

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.4.3</version>
</parent>

<licenses>
    <license>
        <name>GNU General Public License, version 2</name>
        <url>https://www.gnu.org/licenses/gpl-2.0.txt</url>
    </license>
</licenses>

<developers>
    <developer>
        <id>mayhew64</id>
        <name>Bruce Mayhew</name>
        <email>webgoat@owasp.org</email>
        <organization>OWASP</organization>
        <organizationUrl>https://github.com/WebGoat/WebGoat</organizationUrl>
    </developer>
    <developer>
        <id>nbaars</id>
        <name>Nanne Baars</name>
        <email>nanne.baars@owasp.org</email>
        <organizationUrl>https://github.com/nbaars</organizationUrl>
        <timezone>Europe/Amsterdam</timezone>
    </developer>
    <developer>
        <id>misfir3</id>
        <name>Jason White</name>
        <email>jason.white@owasp.org</email>
    </developer>
    <developer>
        <id>zubcevic</id>
        <name>René Zubcevic</name>
        <email>rene.zubcevic@owasp.org</email>
    </developer>
    <developer>
        <id>jwayman</id>
        <name>Jeff Wayman</name>
        <email/>
    </developer>
    <developer>
        <id>dcowden</id>
        <name>Dave Cowden</name>
        <email/>
    </developer>
    <developer>
        <id>lawson89</id>
        <name>Richard Lawson</name>
        <email/>
    </developer>
    <developer>
        <id>dougmorato</id>
        <name>Doug Morato</name>
        <email>doug.morato@owasp.org</email>
        <organization>OWASP</organization>
        <organizationUrl>https://github.com/dougmorato</organizationUrl>
        <timezone>America/New_York</timezone>
        <properties>
            <picUrl>https://avatars2.githubusercontent.com/u/9654?v=3&amp;s=150</picUrl>
        </properties>
    </developer>
</developers>

<mailingLists>
    <mailingList>
        <name>OWASP WebGoat Mailing List</name>
        <subscribe>https://lists.owasp.org/mailman/listinfo/owasp-webgoat</subscribe>
        <unsubscribe>Owasp-webgoat-request@lists.owasp.org</unsubscribe>
        <post>owasp-webgoat@lists.owasp.org</post>
        <archive>http://lists.owasp.org/pipermail/owasp-webgoat/</archive>
    </mailingList>
</mailingLists>

<scm>
    <url>https://github.com/WebGoat/WebGoat</url>
    <connection>scm:git:git@github.com:WebGoat/WebGoat.git</connection>
    <developerConnection>scm:git:git@github.com:WebGoat/WebGoat.git</developerConnection>
    <tag>HEAD</tag>
</scm>

<issueManagement>
    <system>Github Issues</system>
    <url>https://github.com/WebGoat/WebGoat/issues</url>
</issueManagement>

<ciManagement>
    <system>Travis CI</system>
    <url>https://travis-ci.org/WebGoat/WebGoat</url>
</ciManagement>

<properties>
    <!-- Use UTF-8 Encoding -->
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <maven.compiler.source>11</maven.compiler.source>
    <maven.compiler.target>11</maven.compiler.target>

    <!-- This build number will be ubdated by Travis-CI -->
    <build.number>build</build.number>

    <!-- Shared properties with plugins and version numbers across submodules-->
    <activation.version>1.1.1</activation.version>
    <commons-collections.version>3.2.1</commons-collections.version>
    <commons-lang3.version>3.4</commons-lang3.version>
    <commons-io.version>2.6</commons-io.version>
    <guava.version>30.1-jre</guava.version>
    <lombok.version>1.18.4</lombok.version>
    <maven-compiler-plugin.version>3.8.0</maven-compiler-plugin.version>
    <maven-failsafe-plugin.version>2.22.0</maven-failsafe-plugin.version>
    <maven-jar-plugin.version>3.1.2</maven-jar-plugin.version>
    <maven-javadoc-plugin.version>3.1.1</maven-javadoc-plugin.version>
    <maven-source-plugin.version>3.1.0</maven-source-plugin.version>
    <maven-surefire-plugin.version>3.0.0-M4</maven-surefire-plugin.version>
    <revision>8.2.0-SNAPSHOT</revision>
</properties>

<modules>
    <module>webgoat-container</module>
    <module>webgoat-lessons</module>
    <module>webgoat-server</module>
    <module>webwolf</module>
    <module>webgoat-integration-tests</module>
    <module>docker</module><!-- copy required jars in preparation of docker all-in-one build -->
</modules>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-validation</artifactId>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <scope>provided</scope>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-exec</artifactId>
        <version>1.3</version>
    </dependency>
    <dependency>
        <groupId>javax.xml.bind</groupId>
        <artifactId>jaxb-api</artifactId>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>flatten-maven-plugin</artifactId>
            <version>1.2.5</version>
            <configuration>
            </configuration>
            <executions>
                <execution>
                    <id>flatten</id>
                    <phase>process-resources</phase>
                    <goals>
                        <goal>flatten</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>11</source>
                <target>11</target>
                <encoding>UTF-8</encoding>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-checkstyle-plugin</artifactId>
            <version>3.1.0</version>
            <configuration>
                <encoding>UTF-8</encoding>
                <consoleOutput>true</consoleOutput>
                <failsOnError>true</failsOnError>
                <configLocation>config/checkstyle/checkstyle.xml</configLocation>
                <suppressionsLocation>config/checkstyle/suppressions.xml</suppressionsLocation>
                <suppressionsFileExpression>checkstyle.suppressions.file</suppressionsFileExpression>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-pmd-plugin</artifactId>
            <version>3.14.0</version>
            <configuration>
                <targetJdk>11</targetJdk>
                <failurePriority>1</failurePriority><!-- 5 means fail even on the lowest priority, 0 means never fail -->
                <rulesets>
                    <!--suppress UnresolvedMavenProperty -->
                    <ruleset>${maven.multiModuleProjectDirectory}/config/pmd/pmd-ruleset.xml</ruleset>
                </rulesets>
                <failOnViolation>true</failOnViolation>
                <printFailingErrors>true</printFailingErrors>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>check</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

<profiles>
    <profile>
        <id>owasp</id>
        <activation>
            <activeByDefault>false</activeByDefault>
        </activation>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.owasp</groupId>
                    <artifactId>dependency-check-maven</artifactId>
                    <version>5.3.2</version>
                    <configuration>
                        <failBuildOnCVSS>7</failBuildOnCVSS>
                        <skipProvidedScope>true</skipProvidedScope>
                        <skipRuntimeScope>true</skipRuntimeScope>
                        <suppressionFiles>
                            <!--suppress UnresolvedMavenProperty -->
                            <suppressionFile>
                                ${maven.multiModuleProjectDirectory}/config/dependency-check/project-suppression.xml
                            </suppressionFile>
                        </suppressionFiles>
                    </configuration>
                    <executions>
                        <execution>
                            <goals>
                                <goal>check</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>

<repositories>
    <repository>
        <id>central</id>
        <url>https://repo.maven.apache.org/maven2</url>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </repository>
</repositories>
<pluginRepositories>
    <pluginRepository>
        <id>central</id>
        <url>https://repo.maven.apache.org/maven2</url>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </pluginRepository>
</pluginRepositories>

mvn -v output: mvn -v output:

Maven home: /Users/tom/apache-maven-3.6.3
Java version: 16, vendor: Oracle Corporation, runtime: /Library/Java/JavaVirtualMachines/jdk-16.jdk/Contents/Home
Default locale: en_US, platform encoding: UTF-8
OS name: "mac os x", version: "10.15.7", arch: "x86_64", family: "mac"

And my $JAVA_HOME is set to:我的 $JAVA_HOME 设置为:

% echo $JAVA_HOME
/Library/Java/JavaVirtualMachines/jdk-16.jdk/Contents/Home

I believe that there is an issue with Maven not knowing where my correct javac is, but I'm not sure what I need to edit/add in the pom.xml file to make sure that it does know.我认为 Maven 不知道我正确的 javac 在哪里,但我不确定我需要在 pom.xml 文件中编辑/添加什么以确保它确实知道。 I verified that javac is version 16.我验证了 javac 是版本 16。

You need Java 11 to build the project.您需要Java 11来构建项目。 I was able to build it locally using JDK 11. I used maven wrapper.我能够使用 JDK 11 在本地构建它。我使用了 maven 包装器。 You can try using the following command.您可以尝试使用以下命令。

./mvnw clean install

Please try again after switching to JDK 11 and make sure you checkout the master branch.请在切换到 JDK 11 后重试,并确保签出 master 分支。

I had the same issue.我遇到过同样的问题。 Changing the lombok version worked for me.更改 lombok 版本对我有用。 I updated my lombok version to the latest.我将我的龙目岛版本更新到了最新版本。

Steps to resolve:解决步骤:

  1. Do mvn --version: Maven home: /Applications/apache-maven-3.8.1 Java version: 1.16.0_291, vendor: Oracle Corporation, runtime: /Library/Java/JavaVirtualMachines/jdk1.8.0_291.jdk/Contents/Home/jre Default locale: en_IN, platform encoding: UTF-8 OS name: "mac os x", version: "10.15.7", arch: "x86_64", family: "mac" Do mvn --version: Maven home: /Applications/apache-maven-3.8.1 Java version: 1.16.0_291, vendor: Oracle Corporation, runtime: /Library/Java/JavaVirtualMachines/jdk1.8.0_291.jdk/Contents/Home /jre 默认语言环境:en_IN,平台编码:UTF-8 操作系统名称:“mac os x”,版本:“10.15.7”,arch:“x86_64”,系列:“mac”

  2. If your Java version if different from what is project expecting like in my case 1.8 then change setting in environment variables:如果您的 Java 版本与我的案例 1.8 中的项目预期不同,则更改环境变量中的设置:

nano ~/.zshenv -> append "-v 1.8" mention the version name. nano ~/.zshenv -> append "-v 1.8" 提及版本名称。

here.zshenv file:这里.zshenv 文件:


export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)导出 JAVA_HOME=$(/usr/libexec/java_home -v 1.8)

export M2_HOME=/usr/local/Cellar/maven/3.8.1导出 M2_HOME=/usr/local/Cellar/maven/3.8.1

export PATH=$PATH:$M2_HOME/bin导出 PATH=$PATH:$M2_HOME/bin


Do source ~/.zshenv做源 ~/.zshenv

Now check again: mvn --version: Maven home: /Applications/apache-maven-3.8.1 Java version: 1.8.0_291, vendor: Oracle Corporation, runtime: /Library/Java/JavaVirtualMachines/jdk1.8.0_291.jdk/Contents/Home/jre Default locale: en_IN, platform encoding: UTF-8 OS name: "mac os x", version: "10.15.7", arch: "x86_64", family: "mac" Now check again: mvn --version: Maven home: /Applications/apache-maven-3.8.1 Java version: 1.8.0_291, vendor: Oracle Corporation, runtime: /Library/Java/JavaVirtualMachines/jdk1.8.0_291.jdk/ Contents/Home/jre 默认语言环境:en_IN,平台编码:UTF-8 操作系统名称:“mac os x”,版本:“10.15.7”,arch:“x86_64”,系列:“mac”

You will see version is changed to 1.8您将看到版本更改为 1.8

Now build the project.现在构建项目。

I faced the same problem.我遇到了同样的问题。 In my case mvn was using java version 17. The desired version for the project was java 8. Setting up the plugin configuration in the following manner did not help.在我的情况下,mvn 使用的是 java 版本 17。项目所需的版本是 java 8。以以下方式设置插件配置没有帮助。

 <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin>

It apparently only tells mvn current compiler (in my case java 17) to accommodate source as 1.8 and target as 1.8.它显然只告诉 mvn 当前编译器(在我的情况下为 java 17)将源代码容纳为 1.8,将目标代码容纳为 1.8。 The javac which is actually used by mvn for compilation of the project is still java 17. This arrangement, in my particular case, was not working and I was getting the error in question. mvn 实际用于编译项目的 javac 仍然是 java 17。在我的特定情况下,这种安排不起作用,我遇到了有问题的错误。 I had to instruct maven to use javac belonging to java 8 installation.我不得不指示 maven 使用属于 java 8 安装的 javac。 This was achieved by setting an env variable JAVA_1_8_HOME pointing to java home as revealed by the versions installed on my mac system.这是通过设置一个指向 java 主目录的环境变量 JAVA_1_8_HOME 来实现的,正如我的 mac 系统上安装的版本所揭示的那样。 The desired version /Library/Java/JavaVirtualMachines/openjdk-8.jdk/Contents/Home , found by running this command /usr/libexec/java_home -V was set in the JAVA_1_8_HOME environment variable.通过运行此命令/usr/libexec/java_home -V找到的所需版本/Library/Java/JavaVirtualMachines/openjdk-8.jdk/Contents/Home已在 JAVA_1_8_HOME 环境变量中设置。 The following configuration properties are required to be set for maven-compiler-plugin .需要为maven-compiler-plugin设置以下配置属性。

 <configuration> <verbose>true</verbose> <fork>true</fork> <executable>${env.JAVA_1_8_HOME}/bin/javac</executable> <compilerVersion>1.8</compilerVersion> </configuration>

check your java version if compatible with your project or not检查您的 java 版本是否与您的项目兼容

Download jdk-11 and apache-maven-3.8.6 from the official websites and update the java and maven paths as follows: (In mac, type the command open.zshrc and add the below lines)从官网下载jdk-11apache-maven-3.8.6 ,更新java和maven路径如下:(在mac中,输入命令open.zshrc并添加以下行)

export JAVA_HOME=/Users//Library/Java/JavaVirtualMachines/jdk-11.jdk/Contents/Home export JAVA_HOME=/Users//Library/Java/JavaVirtualMachines/jdk-11.jdk/Contents/Home

export M2_HOME=/Users//Downloads/apache-maven-3.8.6 export M2_HOME=/Users//下载/apache-maven-3.8.6

export PATH=$PATH:$M2_HOME/bin导出 PATH=$PATH:$M2_HOME/bin

alias mvn='$M2_HOME/bin/mvn'别名 mvn='$M2_HOME/bin/mvn'

export PATH=/opt/apache-maven-3.8.6/bin:$PATH导出 PATH=/opt/apache-maven-3.8.6/bin:$PATH

Then run mvn clean compile然后运行mvn clean compile

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM