【问题标题】:How to access set of resource files within a JAR in JAvaagent如何在 JAvaagent 中访问 JAR 中的一组资源文件
【发布时间】:2015-12-09 12:02:31
【问题描述】:

我实现了一个javaagent 并且需要访问代理的jar 文件中的一些资源文件。 (例如:log4j.properties 文件、密钥库 .jks 文件等)如果我将它们放在 src/main 下的资源文件夹中,它们将包含在代理 jar 中。

代理 JAR

  • log4j.properties
  • 元信息
  • 代理文件夹

但我如何在代理运行时访问这些文件?如何在代理的项目文件中提供这些文件的路径。一点解释将不胜感激。如果不可能,我想就如何更有效地访问这些配置文件提出一些建议。由于代理将在不同的产品上运行,我认为提供文件夹结构是不合适的。

【问题讨论】:

    标签: java jar log4j javaagents


    【解决方案1】:

    Java 代理只是另一个 Java 程序。包含您的代理的 jar 文件最终位于类路径中,因此可以像访问任何其他资源一样访问。例如,尝试MyAgent.class.getResource("/log4j.properties") 来获取此类文件。这应该可以在任何 Java 程序中按预期工作,并且可以在任何平台上工作。

    【讨论】:

    • 我已经尝试通过将属性文件添加到资源文件夹中。但它只为具有 premain 方法的类打印日志。在 MyClassFileTransformer 中,它说找不到附加程序。你能解释一下为什么会这样吗?
    • 当然可以。但是您的问题是关于如何访问这些资源。答案是:就好像你把代理jar放在类路径上一样。
    • 但是当我只将 log4j 属性文件添加到资源时,它只为具有 premain 方法的类打印日志。在 MyClassFileTransformer 中,它说找不到附加程序。你能解释一下为什么会这样吗?
    • 您是在您的应用程序中使用premain 方法的另一个位置注册您的ClassFileTransformer 吗?也许系统类加载器对其他代码的类加载器不可见。
    • 我只是在包含 premain 的类中使用addTransformer(),而实现 ClassFileTransformer 的类在另一个类中。由于我使用的是 org.apache.commons.logging,如果我添加 commons-logging.properties 文件,那么它也适用。但它是正确的吗?
    猜你喜欢
    • 2011-01-24
    • 2012-04-26
    • 2013-07-20
    • 1970-01-01
    • 1970-01-01
    • 2016-12-03
    • 2013-12-07
    • 2012-11-28
    相关资源
    最近更新 更多