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

7y4bm7vi  于 2023-05-16  发布在  Maven
关注(0)|答案(7)|浏览(258)

在执行任意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"
iyfjxgzm

iyfjxgzm1#

我最好的猜测是guice版本与Java 11不兼容。

btqmn9zl

btqmn9zl2#

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

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

# Untar downloaded file to /opt
sudo 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。
之后,警告将被删除。

enyaitl3

enyaitl33#

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

swvgeqrz

swvgeqrz4#

如果您使用的是自定义版本的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"
68bkxrlz

68bkxrlz5#

即使是最近的Maven发行版,我也遇到了这个问题。打包的Mint版本似乎重用了 libguice-java 包,而不是使用 *guice-4.2.1-no_aop.jar。
所以从Maven站点安装二进制文件解决了这个问题。

von4xj4u

von4xj4u6#

我最近才遇到这个问题,在我的情况下,我使用的是旧版本的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>

对我的案子很有效

ttcibm8c

ttcibm8c7#

Guice刚刚发布了一个新版本,v5.0.1。升级到这个版本应该可以解决这个问题,而不必将Java版本从11降级。
在guice的github上有一个issue完全相同的问题。

相关问题