我的多罐应用在Java 11中运行,并显示与Log4j2相关的警告:
警告:不支持sun.reflect.Reflection.getCallerClass。这将影响性能。
它不会崩溃,但是相当困扰我,因为运营团队(AppDynamics监视器)向我询问了它。我读到我需要在清单中使用“ Multi-Release:true”条目,但是我不知道如何告诉Maven Assembly Plugin添加它。
我在pom.xml中不使用任何其他插件。我应该改用Maven Shade Plugin吗?
无论如何,这是我的pom.xml的Maven组件插件部分。
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
我包括(我也写过)的库使用Log4j 2作为依赖项,如下所示:
<!-- Log4j 2 -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.12.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.12.1</version>
</dependency>
如何摆脱这个警告?
您需要在jar的MANIFEST.MF中将Multi-Release设置为true。在组装插件中,您应该可以通过添加
<archive>
<manifestEntries>
<Multi-Release>true</Multi-Release>
</manifestEntries>
</archive>
到装配体配置的配置部分。
您还可以使用jar插件来创建您的jar。为此,您会这样做
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifestEntries>
<Multi-Release>true</Multi-Release>
</manifestEntries>
</archive>
<finalName>mr-jar-demo.jar</finalName>
</configuration>
</plugin>