0

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

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

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:如果需要添加更多信息,请告诉我,以便编辑我的问题。

4

1 回答 1

0

所有评论都建议避免将 3rd 方库打包到一个 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”,我使用了 eclipse

于 2016-07-29T10:53:20.793 回答