行家:发生了非法的反射访问操作

时间:2019-04-03 10:02:30

标签: maven

在执行任意mvn命令时,我会在日志开头收到以下警告:

WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by com.google.inject.internal.cglib.core.$ReflectUtils$1 (file:/usr/share/maven/lib/guice.jar) to method java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain)
WARNING: Please consider reporting this to the maintainers of com.google.inject.internal.cglib.core.$ReflectUtils$1
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release

不幸的是,这些警告有时会在运行时导致错误并中断我的maven命令执行。有人知道如何解决这个问题并摆脱这些警告吗?

我的Maven版本:

Apache Maven 3.5.2
Maven home: /usr/share/maven
Java version: 11.0.2, vendor: Azul Systems, Inc.
Java home: /usr/lib/jvm/zulu-11-amd64
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "4.15.0-47-generic", arch: "amd64", family: "unix"

7 个答案:

答案 0 :(得分:7)

我正在使用Debian,下面的命令为我删除了此警告。
我也在使用OpenJDK 11。

# Download maven 3.6.3
wget https://www-us.apache.org/dist/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz -P /tmp

# Untar to /opt
tar xf /tmp/apache-maven-*.tar.gz -C /opt

# Install the alternative version for the mvn in your system
sudo update-alternatives --install /usr/bin/mvn mvn /opt/apache-maven-3.6.3/bin/mvn 363

# Check if your configuration is ok. You may use your current or the 3.6.3 whenever you wish, running the command below.
sudo update-alternatives --config mvn

运行最终命令,应选择Maven版本3.6.3。
之后,警告将被删除。

答案 1 :(得分:3)

如果您使用的是自定义版本的Maven或Ubuntu WSL,请删除Maven,从官方网站下载并install

例如,如果您有WSL,并假设您拥有/c/tools目录:

$ sudo apt-get remove maven
$ cd /c/tools/
$ tar xzvf /c/Users/<USER-NAME>/Downloads/apache-maven-3.6.3-bin.tar.gz
$ echo "PATH=/c/tools/apache-maven-3.6.3/bin:$PATH" >> ~/.profile
$ source ~/.profile
$ mvn -v
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: /c/tools/apache-maven-3.6.3
Java version: 11.0.8, vendor: Ubuntu, runtime: /usr/lib/jvm/java-11-openjdk-amd64
Default locale: en, platform encoding: UTF-8
OS name: "linux", version: "4.4.0-18362-microsoft", arch: "amd64", family: "unix"

答案 2 :(得分:0)

我的最佳猜测:您的guice版本与Java 11不兼容。

答案 3 :(得分:0)

正如JF Meier提到的here一样,我的向导版本与Java 11不兼容。使用sdkman重新安装maven为我解决了这个问题。

答案 4 :(得分:0)

即使是最近的Maven发行版,我也遇到了问题。似乎打包的Mint版本重用了 libguice-java 包,而不是使用 guice-4.2.1-no_aop.jar。

因此从Maven站点安装二进制文件解决了该问题。

答案 5 :(得分:0)

我最近才遇到此问题,就我而言,我使用的是旧版的Spring 所以我改变了

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

对此

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

它适用于我的情况

答案 6 :(得分:0)

Guice 刚刚发布了一个新版本,v5.0.1。 升级到这个应该可以解决问题,而不必将 Java 版本从 11 降级。

在 guice 的 github 中有一个 issue 完全相同的问题。