在运行时将资源放在类路径中
Put resource on classpath at runtime
我需要在我的应用程序中创建一个 org.apache.camel.guice.Main 的实例。由于我不想深入的原因,我无法在我的 jar/bundle 中打包 jndi.properties 文件,org.apache.camel.guice.Main.运行() 将使用该文件 bootstrap 应用程序。我也无法向文件系统写入任何内容。
我确实拥有通常进入 jndi.properties 的属性,在 运行 时间可用作为 java 对象、字符串映射等等。我可以将它们写到 "dynamic" jndi.properties 中并将其放在类路径中(或将其作为 "resource" 添加到类加载器中)吗?类似于:
this.getClass().putResourceAsStream(properties);
所以需要通过 getResource() 或 getResourceAsStream() 加载的第 3 方框架可以做到吗?
我做了 4 件事才让它工作:
- 使用 InitialContext 中的构造函数
java.util.Properties 作为创建上下文的参数
- 在 Activator 中使用 hack 来确保我的应用程序包使用的是包上下文类加载器,而不是线程上下文类加载器
- 除了 package-imports 之外,在 header 中使用 require bundle。
- 使用org.apache.camel.guice.Main.run()启动camel
非常感谢 Thorbjorn Andersen 的评论,这让我回去仔细研究了 InitialContext api。
我需要在我的应用程序中创建一个 org.apache.camel.guice.Main 的实例。由于我不想深入的原因,我无法在我的 jar/bundle 中打包 jndi.properties 文件,org.apache.camel.guice.Main.运行() 将使用该文件 bootstrap 应用程序。我也无法向文件系统写入任何内容。
我确实拥有通常进入 jndi.properties 的属性,在 运行 时间可用作为 java 对象、字符串映射等等。我可以将它们写到 "dynamic" jndi.properties 中并将其放在类路径中(或将其作为 "resource" 添加到类加载器中)吗?类似于:
this.getClass().putResourceAsStream(properties);
所以需要通过 getResource() 或 getResourceAsStream() 加载的第 3 方框架可以做到吗?
我做了 4 件事才让它工作:
- 使用 InitialContext 中的构造函数 java.util.Properties 作为创建上下文的参数
- 在 Activator 中使用 hack 来确保我的应用程序包使用的是包上下文类加载器,而不是线程上下文类加载器
- 除了 package-imports 之外,在 header 中使用 require bundle。
- 使用org.apache.camel.guice.Main.run()启动camel
非常感谢 Thorbjorn Andersen 的评论,这让我回去仔细研究了 InitialContext api。