如何将Java代理打包到宿主项目中?

1l5u6lss  于 12个月前  发布在  Java
关注(0)|答案(1)|浏览(131)

你好,我是新来的堆栈溢出,我是笨拙的,当谈到问问题。但如果问题不清楚,我将提供更多的信息。这是我遇到的问题,如下所示:

背景:我有两个项目,一个是我的业务项目A,另一个是我的Java Agent项目B。我使用“java -javaagent:B.jar -jar A.jar”方法启动它们。
**分歧:**目前有两种不同的方法:
**(I)**我将B.jar和相关配置文件放在A.jar的父目录Base_Dir下的“serial”目录中,并使用Shell脚本启动它们。
**(II)**我的主管希望我将“serial”目录打包到A.jar中。
**问题:**关于上述分歧,我有两个问题:
**(I)**在Java项目中将“serial”目录打包到A.jar中是否可行?
**(二)**一般而言,处理这类项目结构问题的最常见做法或最佳做法是什么?
如果收到您的回复,我将非常感谢

目录结构:
我不能在我的问题中发布图像,这是我的结构:

C:.
│  SerialNumberAppDemo-1.0-SNAPSHOT.jar
│
└─serial
        ConfoundLogback.xml
        demo-1.jar
        readme.md
        sample-configs.properties

business jar and serial directorythe content of serial directory

efzxgjgh

efzxgjgh1#

B.jar包含在A.jar中时,-javaagent:B.jar选项不起作用,因为该选项在默认文件系统中查找文件,而不是在另一个jar文件中。
从Java 9开始,您可以在A.jar的manifest中指定Launcher-Agent-Class属性,以在同一个jar文件中指定一个Agent类,以便在使用-jar A.jar启动应用程序时自动启动(因此不需要-javaagent)。这需要将Java代理(B.jar)的类直接添加到A.jar,而不是将B.jar作为单个条目添加到A.jar
当添加其他资源时,您可能必须调整代理的代码以使用getResourcegetResourceAsStream,而不是在默认文件系统中查找jar文件旁边的文件,以防它需要读取其中一个(例如,ConfoundLogback.xml)。
其他文件,例如readme.mdsample-configs.properties,看起来不像是Agent需要的,而是要被其他工具甚至人类读取。对于他们来说,将这些文件放在jar文件中而不是立即在目录中可见是否足够,这超出了Stackoverflow的范围。
总而言之,仅仅将serial目录添加到应用程序的jar文件中是行不通的。

相关问题