java - 如何使用 Gradle java 插件将“illegal-access=deny”传递给单元测试的 JVM 参数?
问题描述
--illegal-access=deny
当我在 Eclipse 中使用 JVM args 运行它时,我有一个测试正确失败并出现 InaccessibleObjectException 。我希望它在我运行时以同样的方式失败gradle check
。
我尝试了How to pass args to JVM 中的解决方案,该解决方案使用 Gradle 运行测试:
# build.gradle
apply plugin: 'java'
test {
jvmArgs '--illegal-access=deny'
# also tried
# jvmArgs('--illegal-access', 'deny')
# jvmArgs '-Dillegal-access=deny'
}
测试通过而不是失败。我确实看到测试说它们很脏,因为 jvmArgs 已更改。
这是失败的 JUnit 测试。抱歉,它没有设置“expectedException”,但是--illegal-access=deny
从 Eclipse 运行时它会抛出异常。
import static org.junit.Assert.fail;
import java.lang.reflect.Field;
import org.junit.Test;
public class IllegalAccessTest {
@Test
public void testIllegalAccess() throws NoSuchFieldException, SecurityException {
Field libraries = ClassLoader.class.getDeclaredField("loadedLibraryNames");
System.out.println("About to set accessible");
libraries.setAccessible(true);
fail("Should fail before getting here when run with --illegal-access=deny");
}
}
使用 Gradle 运行时,此测试的输出显示-Dillegal-access=deny
正在传递给 Gradle,而不会导致测试失败:
Starting process 'Gradle Test Executor 33'. Working directory: xxx Command: /usr/java/jdk-11.0.4/bin/java -Dillegal-access=deny -Dorg.gradle.native=false -javaagent:xxx,jmx=false @/tmp/gradle-worker-classpath17509364376879385105txt -Xmx512m -Dfile.encoding=UTF-8 -Duser.country=US -Duser.language=en -Duser.variant -ea worker.org.gradle.process.internal.worker.GradleWorkerMain 'Gradle Test Executor 33'
Successfully started process 'Gradle Test Executor 33'
x.y.z.IllegalAccessTest > testIllegalAccessQS STANDARD_OUT
About to set accessible
x.y.z.IllegalAccessTest > testIllegalAccessQS FAILED
java.lang.AssertionError: Should fail before getting here when run with --illegal-access=deny
at org.junit.Assert.fail(Assert.java:88)
at x.y.z.IllegalAccessTest.testIllegalAccessQS(IllegalAccessTest.java:36)
使用 Eclipse 运行时的错误消息是正确的
java.lang.reflect.InaccessibleObjectException: Unable to make field private static final java.util.Set java.lang.ClassLoader.loadedLibraryNames accessible: module java.base does not "opens java.lang" to unnamed module @6b9651f3
解决方案
推荐阅读
- database - Kubernetes 卷快照与。sql备份?
- ios - iOS 中钥匙串服务的生命周期
- javascript - 布尔值和文本字段验证 - Javascript
- docker - PKIX 路径构建无法在 Digital Ocean 中找到到请求目标的有效认证路径
- powershell - 查找 PowerShell 错误最初是终止还是非终止
- sql - MS SQL - 计算字段中单词的出现次数
- android - 如何将原始 h.264 文件转换为 mp4
- javascript - 警报关注输入字段后
- windows - 创建用于运行预定脚本的系统帐户?
- node.js - 带有 reactjs 和 nodejs 的 Shopify 应用程序没有 nextjs?