在java代码中设置-noverify标志

时间:2017-04-22 12:31:09

标签: java jvm jvm-arguments

我想通过java代码将-noverify设置为VM参数。我在网上找不到任何资源来帮助解决这个问题。

如果我使用System.setProperty(..,..),我应该将什么设置为值或键?

我尝试使用System.property("Xverify","none"),但这似乎不起作用。

注意:这只是为了运行一些测试用例。由于此问题,我正在关闭字节码验证 - link

谢谢。

2 个答案:

答案 0 :(得分:6)

让我在这个答案中总结一下评论。

  • 关闭字节码验证很危险,尤其是当你知道应用程序抛出gulp.task('compileHandlebars', function () { delete require.cache[require.resolve('./src/layout.json')] var buildSettings = require('./src/layout.json'); var templateData = buildSettings, options = { batch : ['./src/assets/templates/**/*.handlebars'] } gulp.src('./src/index.handlebars') .pipe(handlebars(templateData, options)) .pipe(rename('index.html')) .pipe(cleanhtml()) .pipe(gulp.dest('./dist')) .pipe(livereload()); }); 时。这意味着应用程序生成无效的字节码,当JVM执行它时,结果是不可预测的。例如,JVM可能会像this question一样崩溃。
  • 没有合法的方法可以通过编程方式关闭字节码验证。否则,这将是严重的安全漏洞,允许在没有明确权限的情况下运行不安全的代码。
  • The link您提到的PowerMock问题确认Javassist库中存在错误。解决问题的正确方法是更新到已修复此错误的较新Javassist版本。

答案 1 :(得分:2)

你需要使用" -Xverify:none"作为vm参数。 建议不要在生产环境中使用-Xverify:none。

对于那些不熟悉字节码验证的人来说,它只是JVM的类加载过程的一部分,它检查代码是否存在某些危险和不允许的行为。您可以(但不应该)通过添加-Xverify:none

在许多JVM上禁用此保护

请查看有关使用此标记的副作用的完整详细信息 - https://blogs.oracle.com/buck/entry/never_disable_bytecode_verification_in