【问题标题】:How to include jars that load other jars in maven?如何在 Maven 中包含加载其他罐子的罐子?
【发布时间】:2015-06-27 18:06:53
【问题描述】:

我正在 NetBeans 中开发一个 Java 应用程序并使用 maven 作为依赖项。我在一个文件夹中有一堆罐子。这些 jar 加载位于它们已知路径中的其他 jar。在我看来,当我在 Maven 中加载本地 jar 时,它实际上是将 jar 复制到另一个位置。问题是移动的罐子再也找不到其他罐子了,因为现在它们罐子的相对路径被破坏了。 是否可以使用 maven 使包含的罐子不会从原来的位置移动,以便他们可以找到其他罐子?或者如果这是不可能的,有没有办法给 maven 一个包含子文件夹的整个文件夹,如果 maven 移动整个文件夹,它也会移动所有子文件夹和里面的 jar? 我不确定我是否足够清楚。我也是 Maven 的新手。在我看来,ant 在这方面更灵活。

编辑:阅读 cmets 后,我似乎不是很清楚。基本上,我工作的公司有两个应用程序,它们共享一些使用 URLClassLoader 加载其他 jar 的常见 jar。我不想再次分发这些常见的罐子,我希望我的第二个应用程序从我的第一个应用程序放置它们的位置找到并加载这些罐子。我找到了一个解决方案,方法是使用 maven 导入一个 jar,该 jar 使用带有硬编码路径的 URLClassLoader 来加载其他 jar。

【问题讨论】:

  • 您的目标是拥有一个包含所有依赖项的 jar,以便以后运行吗?也许你应该看看这个:stackoverflow.com/questions/16222748/…
  • 可能依赖于系统路径,请参阅此答案stackoverflow.com/a/765032/2417043
  • 这些神秘的 jar 是否使用 Java URLClassLoader 类之类的东西从其他未命名的 jar 中加载类?所以你试图保留让后门黑客存活的路径?
  • 感谢大家的cmets。我在原始帖子中添加了一个编辑部分。在 jbarrueta:我希望避免重新分配常见的罐子,无论是在主罐子内部还是外部。在 durron597:我希望避免重新分发依赖 jar。在 arghtype:我希望避免手动导入 pom 文件中的每个 jar(有很多 jar)。在 chrislott:是的,我正在使用 URLClassLoader,但我不想让任何后门黑客保持活跃。你这样做并不意味着每个人都这样做。

标签: java maven jar


【解决方案1】:

我有一个模块,它的 pom 文件在开头包含这些行:

<groupId>com.domain.project</groupId>
<artifactId>MyFirstProgect</artifactId>
<packaging>jar</packaging>
<version>1.2.3-snapshot</version>

在我编译完这个项目后,maven 会将它放入本地存储库(我的位于 C:\Users\MyUser.m2\repository,在 linux 中它应该在 /home/myUser/.m2/repository 中的某个位置) .

之后我可以像这样在第二个项目中添加一个依赖项:

    <dependency>
        <groupId>com.domain.project</groupId>
        <artifactId>MyFirstProgect</artifactId>
        <version>1.2.3-snapshot</version>
    </dependency>

就我而言,这对我有帮助。 附言但这将导致整个第一个项目被添加为依赖项。所以也许这对你来说不是完美的解决方案。

【讨论】:

  • 谢谢德米特里。整个项目是一个依赖项不会是一个问题。但是,如果第一个项目使用 maven,您的解决方案就很好。然而,在我的案例中,第一个项目使用 ant 并在 maven 未知的任意位置创建 jar。我会将您的答案标记为解决方案,因为它最接近我正在寻找的答案。
  • 不客气,感谢您将我的回答标记为回复!
猜你喜欢
  • 2011-07-19
  • 1970-01-01
  • 2010-12-25
  • 2017-05-02
  • 1970-01-01
  • 2018-04-12
  • 1970-01-01
  • 2012-09-03
  • 1970-01-01
相关资源
最近更新 更多