提问人:Eric Chen 提问时间:10/10/2023 最后编辑:Eric Chen 更新时间:10/10/2023 访问量:63
如何将 Java 代理打包到主机项目中?
How to Package a Java Agent into the Host Project?
问:
你好,我是 Stack Overflow 的新手,在提问方面我很笨拙。 但如果问题不清楚,我将提供更多信息。 这是我遇到的问题,如下所示:
背景: 我有两个项目,一个是我的商业项目 A,另一个是我的 Java 代理项目 B。我使用'java -javaagent:B.jar -jar A.jar'方法启动它们。
分歧:目前,有两种不同的方法:
(I) 我将 B.jar 和相关配置文件放在 A Base_Dir 的父目录下的“serial”目录下.jar并使用 Shell 脚本启动它们。
(II)我的主管希望我将“serial”目录打包到A.jar中。
问题:关于上述分歧,我有两个问题:
(I)在Java项目中将“serial”目录打包成A.jar是否可行?
(II) 通常,解决此类项目结构问题的更常见做法或最佳做法是什么?
如果我收到您的任何回复,我将不胜感激。
目录结构:
我不能在我的问题中发布图片,这是我的结构:
C:.
│ SerialNumberAppDemo-1.0-SNAPSHOT.jar
│
└─serial
ConfoundLogback.xml
demo-1.jar
readme.md
sample-configs.properties
答:
当包含在 中时,该选项不起作用,因为此选项在默认文件系统中查找文件,而不是在另一个 jar 文件中查找文件。B.jar
A.jar
-javaagent:B.jar
从 Java 9 开始,您可以在清单中指定 Launcher-Agent-Class
属性,以在同一 jar 文件中指定 Agent 类,以便在启动应用程序时自动启动(因此不需要)。这要求直接添加 Java 代理 (of ) 的类,而不是作为单个条目添加到。A.jar
-jar A.jar
-javaagent
B.jar
A.jar
B.jar
A.jar
在添加其他资源时,您可能必须调整代理的代码以使用或代替在默认文件系统中的 jar 文件旁边查找文件,以防它需要读取其中之一(例如 )。getResource
getResourceAsStream
ConfoundLogback.xml
其他文件,例如 并且,看起来不像是特工需要的,而是打算被其他工具甚至人类读取。对于他们来说,将这些文件放在 jar 文件中而不是立即在目录中可见是否足够,这是一个超出 Stackoverflow 范围的问题。readme.md
sample-configs.properties
总而言之,仅仅将目录添加到应用程序的 jar 文件中是行不通的。serial
评论