【问题标题】:Creating java library containing 3rd party (jar) libraries创建包含 3rd 方 (jar) 库的 java 库
【发布时间】:2016-07-26 14:02:11
【问题描述】:

我需要生成一个 jar 文件,该文件将被其他人用作库(我们称之为“myLib.jar”),因此该 jar 不需要是可执行的。该库依赖于其他一些第 3 方 jar,但我不希望使用“myLib.jar”的人将它们包含在他/她的 Buildpath 中。

在搜索时,我找到了OneJar,并按照页面顶部的两个步骤进行操作。

1. Download one-jar-appgen-0.97.jar
   Generate application, build, and run it.
   $ java -jar one-jar-appgen-0.97.jar

2. Enter project path (project name is last segment): c:/tmp/test-one-jar
   Enter java package name: com.example.onejar
   $ cd c:/tmp/test-one-jar 
   $ ant 
   $ cd build 
   $ java -jar test-one-jar.jar
   test_one_jar main entry point, args=[]
   test_one_jar main is running
   test_one_jar OK.
   Add source code to the src directory, library jars to the lib directory, and rebuild.

不幸的是,这对我不起作用,因为当我尝试在新项目中包含“myLib.jar”时,我无法使用预期的类。


所以……

Q1:OneJar 是否仅适用于可执行 jar?如果不是,我怎么能实现我上面描述的。

Q2:如果 OneJar 仅用于可执行文件,是否还有其他方法可以生成“myLib.jar”库?


PS:如果需要添加更多信息,请告诉我,以便编辑我的问题。

【问题讨论】:

  • 为什么不将您自己的类打包到“myLib.jar”中,然后通知用户您的依赖项。更好的是,如果您使用 Maven 或 Gradle 等构建工具,您可以声明您的依赖项,以便当它们包含您的库时,它们会自动获取它们!
  • 理想情况下,我只想分发一个没有任何依赖关系的 jar,并且除了将这个 jar 包含到 buildpath 之外,不期望用户做任何其他事情。如果这是不可能的,我可以尝试类似 maven 的东西。
  • 另外,您为什么认为这是一项要求?期望您的库的用户必须在运行时依赖于他们的类路径是完全合理的。我从来没有因为一个库有依赖关系而放弃使用它。
  • 您是否检查了依赖项的许可条款,以确保可以重新打包 JAR。至少对于一些开源许可证,重新打包违背了精神,如果不是许可证的文字的话。 (我正在考虑 LGPL 关于“链接”的规则......旨在让您的用户更容易使用不同版本的依赖项。)
  • 当有些人想将 myLib.jar 与其他库一起使用时,您会感到头疼。假设 myLib.jar 具有依赖项 A 版本 1。其他一些库可能具有依赖项 A 版本 2。您将两个版本都强制到它们的路径中。

标签: java jar onejar


【解决方案1】:

所有 cmets 都建议避免将第 3 方库打包到一个 jar 中。这有几个充分的理由

  1. 将所有 3rd 方库打包到一个 jar 中,允许使用“myLib.jar”的用户拥有 3rd 方库的最新版本。
  2. 禁止任何其他库使用打包在“myLib.jar”中的相同第 3 方库,因为这会导致类路径冲突。
  3. 您必须非常小心地使用许可证。每个第 3 方库都可能受特定许可证的约束。许多许可证不兼容,不能一起使用。

那么,我最终做了什么?

正如@rmlan 向我保证的那样,通知库的用户将另一个库添加到他们的类路径中并没有错。 牢记这一点,我创建了以下文件夹结构(这实际上是许多其他人所做的)并将其压缩到一个压缩文件中:

myLib
-----bin
----------myLib.jar
-----documentation (mentions 'myLib' dependencies among other stuff)
-----lib (contains the 3rd party libraries)
----------thirdPartyLibrary.jar
----------anotherThirdPartyLibrary.jar
-----source (if it is an open source project)

最后,就我而言,我无法使用 maven 或其他替代方案,但如果可以的话,这将使整个过程变得更加容易。


编辑: 要创建“myLib.jar”,我有 used eclipse

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-07
    • 2012-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-12
    • 2017-11-03
    • 1970-01-01
    相关资源
    最近更新 更多