当前位置: 首页 > 面试题库 >

如何将javaagent的类放在类路径中

马坚白
2023-03-14
问题内容

我正在尝试开发一个Java代理,它将借助asm-4来检测代码。现在,我陷入了一个非常基本的问题,javaagent的类加载器看不到asm依赖关系,因此失败。我是否必须提供一个jar-
with-
dependencies(又名maven构建插件),其中包含代理所需的所有类,或者是否有另一种方法可将类添加到Java代理?直接在类路径中引用jar
asm-all.jar并没有帮助。最初,构建具有依赖关系的jar并没有帮助,因为无法使用程序集插件设置Premain-Class属性。感谢帮助;-)


问题答案:

好的,通过实验找到了它。依赖类应该是jar的一部分,可以通过maven程序集插件创建,例如:

    <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>2.2</version>
        <configuration>
            <descriptorRefs>
                <descriptorRef>jar-with-dependencies</descriptorRef>
            </descriptorRefs>
            <archive>
                <index>true</index>
                <manifest>
                    <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                    <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
                </manifest>
                <manifestEntries>
                    <Premain-Class>test.agent.MyAgent</Premain-Class>
                </manifestEntries>
            </archive>
        </configuration>
        <executions>
            <execution>
                <id>make-assembly</id>
                <!-- this is used for inheritance merges -->
                <phase>package</phase>
                <!-- append to the packaging phase. -->
                <goals>
                    <goal>single</goal>
                    <!-- goals == mojos -->
                </goals>
            </execution>
        </executions>
    </plugin>

使用jar作为javaagent路径,一切正常。



 类似资料:
  • 我正在使用Java代理和Javassist向一些JDK类添加一些日志记录。实际上,当系统加载一些TLS类时,Javassist会向它们添加一些额外的字节码,以帮助我调试一些连接问题。 问题是,考虑到这个类包含在代理jar中: 在我的代理的转换方法中,假设我试图使用javassist调用该类: 你认为这行得通,但我得到了这个: 有没有办法将该类[]添加到应用程序的类路径中?

  • 问题内容: 我有Jetty jetty-9.2.3.v20140905 我的理解是lib / jar或lib / ext中的jar会自动放在类路径中,但这可能是码头8的旧行为。 我正在尝试使用websockets部署一个webapp。有了我在webapps目录中部署的WAR文件,jetty一直抱怨说,它无法在jetty / lib目录(jetty-http,jetty-io,jetty-secur

  • 首先,我不完全确定这是正确的问题。基本上,我的最终目标是生成一个可以操作一组。docx文件的程序,以便对每个文件进行小的更改。在我看来,docx4j是实现这一目标的最佳方式。但是,我从来没有使用过提供的库之外的库。我首先试图破译手册中提供的所有信息,然后告诉我需要SLF4J才能使用Docx4J。 从这一点来看,我想我做错了什么。我很确定我知道我想写的程序背后的伪逻辑,但我不确定如何写它。我还没有做

  • 我正在使用Maven构建Spring Boot应用程序,因此我可以从以下内容开始: 我希望在类路径上首先有一个目录,这样我就可以在文件系统上放置一些文件,而不必解压缩jar来更改它们。 我试过使用加载程序。路径,但它似乎不起作用。 dir是jar所在的子目录。我正在尝试加载一个密钥库文件,该文件在我的应用程序中作为注入。src/main/资源中有这样一个文件,但它仅在我的IDE中有效,在打包为ja

  • 问题内容: 我有很多jar文件要添加到我的类路径中,因此,每次编译Java文件时,都会得到如下命令: 我尝试使用: 然后: 但是根本没有添加jar:由于缺少jar,我得到了错误信息…谢谢 问题答案: 也许您想尝试使用Maven来构建您的应用程序?它真的很容易设置,并且消除了依赖管理的所有问题。 同样从Java 6开始,您可以在类路径中使用通配符: set CLASSPATH = my_libs \

  • 问题内容: 我在测试类中使用以下代码,以将所有spring.xml文件加载到classpath和application-content.xml文件中。 有没有一种方法可以打印classpath中所有“ spring.xml”文件的路径?我有一些jar文件,其中包含spring.xml。但是,其中一些可能不需要运行测试。有没有办法打印它们(jar文件或路径)并删除程序上不需要的spring.xml文