创建包含第三方(jar)库的java库

时间:2016-07-26 14:02:12

标签: java jar onejar

我需要生成一个jar文件,将其他人用作库(让我们称之为'myLib.jar'),因此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:如果需要添加更多信息,请告诉我,以便编辑我的问题。

1 个答案:

答案 0 :(得分:0)

所有评论都建议避免将第三方库打包到一个jar中。这有几个很好的理由

  1. 将所有第三方库包装到一个jar中,允许使用' myLib.jar'拥有第三方库的最新版本。
  2. 任何其他图书馆都禁止使用包含在' myLib.jar'中的相同第三方图书馆。因为这会导致类路径冲突。
  3. 您必须非常小心许可证。每个第三方图书馆都可能受特定许可证的限制。许多许可证不兼容,不能一起使用。
  4. 那么,我最终做了什么?

    正如@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