java - _JAVA_OPTIONS 和 CLASSPATH 组合

标签 java classpath agent

我尝试将代理附加到程序。

我使用 _JAVA_OPTIONS 进行以下操作:

export _JAVA_OPTIONS='-javaagent:/java/libs/doeke_sfjl_ui/sfjl_ui_widget_agent.jar'

但它需要一个 jar 文件才能运行。 我尝试使用以下方法解决这个问题:

export CLASSPATH=/java/libs/javassist-3.26.0.GA/javassist-3.26.0.GA.jar

但我仍然得到:

ClassNotFoundException: javassist.expr.ExprEditor

它位于javassist-3.26.0.GA.jar中。

如何在代理运行之前添加 javassist-3.26.0.GA.jar

最佳答案

这里出现问题的各种不同方式:

  1. 您应该避免这些环境变量。 java 背后的想法是你可以同时运行 8 个不同的应用程序。特别是在 Windows 上,环境变量是“全局”的;您可以为每个进程指定它们,尤其是在 UNIX 上,但是为什么不直接手动使用这些开关呢?此外,绝大多数教程等都假定您的默认类路径至少包括 . (当前目录),您在这里的尝试覆盖了它,所以您这样做有点搞乱了您的java安装。为什么你不能直接运行 java -cp whatever -javaagent:thingie.jar 有充分的理由吗? ?

  2. java 代理在 VM 内的单独空间中运行,并且该空间不会按照您指定的方式使用类路径。最简单的修复方法是让代理 jar 修复其自己的类路径,方法是附带列出其类路径的 list 条目。这意味着您需要一个名为 META-INF/MANIFEST.MF 的文件在代理 jar 里面,里面有一行文字:Boot-Class-Path: lib/a.jar lib/b.jar其中 [1] 空格是分隔符,[2] 正斜杠用于分隔路径部分,即使在 Windows 上也是如此,[3] 它相对于包含此 jar 的目录。请注意,通常您会使用 Class-Path:对于 Java 应用程序; Boot-Class-Path专门用于java代理。

参见section Manifest Attributes in Instrumentation's documentation了解更多详情。

关于java - _JAVA_OPTIONS 和 CLASSPATH 组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58856634/

相关文章:

java - 以编程方式更改布局权重

java - Java 中的独立 Socket.IO 服务器

支持 IDE 和生成的 JAR 的 Java 路径

java - 运行 Java 代理 XPage

ssh - Jenkins 通过 SSH 奇怪重新启动 Slave Agent

java - 如何在启动 mule 时自动运行一次流程?

java - Groovy 文字正则表达式/\\/未编译

java - 是否可以从 jaas.conf 中的类路径引用 key 表?

java - 无法找到或加载主类 - 通过命令提示符运行时出错

time - 每蜱释放两只海龟 netlogo