Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用BootGradle插件在SpringBoot应用程序中嵌入javaagent_Java_Spring Boot_Javaagents_Spring Boot Gradle Plugin - Fatal编程技术网

如何使用BootGradle插件在SpringBoot应用程序中嵌入javaagent

如何使用BootGradle插件在SpringBoot应用程序中嵌入javaagent,java,spring-boot,javaagents,spring-boot-gradle-plugin,Java,Spring Boot,Javaagents,Spring Boot Gradle Plugin,我正在为我的spring boot应用程序使用javaagent,目前我正在通过 java -javaagent:agent.jar -jar app.jar 我的项目是一个gradle项目,我想将agent.jar嵌入app.jar中,这样我就可以像其他人一样运行它 java -javaagent:app.jar -jar app.jar 这可以通过这里提到的bootmaven插件来完成,但是bootmaven插件没有其他选择。我发现最接近的是这个-,但它没有按照预期嵌入jar 还有其他方

我正在为我的spring boot应用程序使用javaagent,目前我正在通过

java -javaagent:agent.jar -jar app.jar
我的项目是一个gradle项目,我想将agent.jar嵌入app.jar中,这样我就可以像其他人一样运行它

java -javaagent:app.jar -jar app.jar
这可以通过这里提到的bootmaven插件来完成,但是bootmaven插件没有其他选择。我发现最接近的是这个-,但它没有按照预期嵌入jar


还有其他方法可以通过gradle完成吗?

可以作为依赖项jar从本地目录添加libs是项目中的目录

依赖关系{ 编译文件树(目录:“libs”,包括:“*.jar”) }

玻璃瓶:

jar {
manifest{
    attributes "Agent-Class" : "com.......agent.AgentTest"
    //attributes "Premain-Class" : "com.......agent.AgentTest"
        }
    }
尽管如此,我还是习惯这样做:

    public static void main(String[] args) throws Exception {
    String pid = "6236";
    String agentPath = "...";
    VirtualMachine virtualMachine = com.sun.tools.attach.VirtualMachine.attach(pid);
    virtualmachine.loadAgent("/home/aaa/Code/agent-1.0-SNAPSHOT.jar");
    virtualMachine.detach();
}
你试过了吗

java -Xbootclasspath=('your path'/app.jar or 'your path to libs'/agent.jar) -javaagent:'your path'/app.jar -jar 'your path'/app.jar
?


另一种方法:使用jar作为依赖项,并在Spring Boot应用程序jar中移动(或创建另一个)premain类。

这将把它放在Boot-INF/lib目录下,在引导过程中不会加载代理jar。但我希望代理jar的类位于引导jar的最顶层目录中,这样MANIFEST.MF中的Pre-Main指令就可以找到该类。这是为了什么?在微服务中嵌入Infrastructure/util/etc libs绝对不是最佳做法,您的spring boot应用程序可能就是这样。其目的是spring boot应用程序在cloud foundry中运行,而我们还没有任何针对该代理的服务。因此,我希望代理jar嵌入到启动jar中,这样我们就可以将其推送到cf并在不进行任何其他配置更改的情况下使用它。这将把代理类放在启动jar中的boot-INF/classes文件夹中,该文件夹同样无法通过-javaagent参数访问。有趣的是,-Xbootclasspath()是一个不用于编译的选项,它是为了一个运行的jar,所以我不明白它怎么能把jar文件复制到任何地方?为什么不将代理jar文件复制到根文件夹。我没有说任何关于bootclasspath的事情。我的意思是,当我使用gradlebuild创建一个spring引导jar时,它将premain类放在boot-INF/classes文件夹中,并将代理jar放在boot-INF/libs文件夹中。您的命令行arg不适用于此启动jar布局。在cf环境中运行应用程序时,如何获取pid?我唯一的目标是在不同的cf环境中以可移植的方式运行它。@Anidyachatterjee抱歉,我对此不确定。也许你可以试试:build.gradle apply plugin:'maven',详细信息可能会被忽略