【问题标题】:How to directly make use of JAR file from main resources folder Java [duplicate]如何直接使用主资源文件夹Java中的JAR文件[重复]
【发布时间】:2016-03-09 07:27:31
【问题描述】:

这可能是一个稍微不寻常的问题,但我有一个独特的情况,这样的事情对我来说是一个很好的解决方案。

我的 src/main/resources 中有一个 jar 文件(称为 engine.jar)。如何从我的主要 JAVA 类中直接使用这个 jar? (在构建路径中添加这个?)但是....

我的 Maven 依赖库中有另一个 JAR 文件(名称完全相同,即 engine.jar),它的代码略有不同。我想稍后在我的主课中使用这个 jar。

【问题讨论】:

  • 您不应该将 jar 文件放入 src/main/resources 或 maven 项目中的任何子文件夹中。它应该被放入您的存储库管理器中,而不是像任何其他依赖项一样简单地将其用作依赖项。
  • @khmarbaise 是的,但正如我所提到的,我有一个独特的情况。这就是我的问题的基础
  • 什么是独一无二的?你能解释一下为什么你会遇到这种情况吗?你的设置听起来不对...是为了测试还是什么?
  • 是的,我想针对我的新旧引擎运行测试,以确保向后兼容性
  • 如果你有一个测试,那么 jar 文件应该放入 src/test/resources 除了你有集成测试,这意味着通常在 maven 中有一个单独的模块,其中包含适当的依赖项,所以不需要资源文件夹中的jar文件...

标签: java eclipse maven jar


【解决方案1】:

Maven 资源文件夹的内容被复制到目标/类,并从那里复制到生成的 Jar 文件的根目录。这是预期的行为。

我不明白您的方案中存在什么问题。通过getClass().getResource("/filename.txt") 引用资源从类路径的根开始,无论它(或其元素)是target/classes 还是JAR 的根。我看到的唯一可能的错误是您使用了错误的ClassLoader。

确保使用资源的类与资源在同一个工件 (JAR) 中并执行ThatClass.class.getResource("/path/with/slash") or ThatClass.class.getClassLoader().getResource("path/without/slash").

但除此之外:如果它不起作用,您可能在构建过程中的某个地方做错了什么。你能验证资源在 JAR 中吗?

【讨论】:

  • 我还没有编写使用 jar 中的类和方法的顶级类。我实际上不确定我是否理解您的解决方案。 jar 文件位于 src/main/resources 的根目录下。您是说我可以使用 .getResource 并直接指向 jar 文件中的完全限定类吗? 'com/company/engine/PrintEngine.java' 我的导入语句看起来如何?导入 com.company.engine.PrintEngine.
猜你喜欢
  • 2018-06-03
  • 2014-01-28
  • 1970-01-01
  • 2012-12-07
  • 2022-01-24
  • 1970-01-01
  • 2018-02-07
  • 2015-04-21
  • 2013-04-28
相关资源
最近更新 更多