2016-07-26 17 views
0

他の人がライブラリとして使用するjarファイルを生成する必要があります(これを 'myLib.jar'と呼ぶことができます)ので、jarファイルを実行する必要はありません。ライブラリは他のサードパーティ製のjarファイルに依存していますが、myLib.jarを使ってBuildPathに組み込むことは期待できません。サードパーティ(jar)ライブラリを含むJavaライブラリを作成する

検索中、私は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:私の質問を編集するには、さらに情報を追加する必要がある場合はお知らせください。

+2

理由だけではなく、「myLib.jar」に独自のクラスをパッケージ化して、あなたの依存関係のユーザーに通知いませんでした。さらに良いことに、MavenやGradleのようなビルドツールを使用した場合、依存関係を宣言することで、ライブラリが含まれていると自動的に取得することができます。 – rmlan

+0

理想的には、依存関係なしで、ビルダーパスにこのjarファイルを含める以外のことをユーザーが期待することなく、ただ1つのjarファイルを配布したいと思っていました。これが不可能な場合は、私はmavenのようなものを試してみるかもしれません。 – Mario

+0

可能性があります(しばしば「シェーディング」と呼ばれるものを使用しています)が、それは必ずしもひどく頻繁に使用されるべきではありません。今日使用されている大半のオープンソースプロジェクトを見てみましょう:それらはすべてMavenのような依存関係宣言を提供するか、依存するすべての依存関係を個別のjar(つまり、単一のjarではない)として_zipアーカイブにパッケージ化します。単一のjarの問題は、バージョンとクラスパスの競合になり、見つけにくくなり、デバッグが難しくなります。 – rmlan

答えて

0

すべてのコメントは、サードパーティのライブラリを単一のjarファイルにまとめることを避けるためのものです。このためいくつかの理由あります

1瓶に、すべてのサードパーティのライブラリをパッキング
  1. は、「myLib.jar」を使用するものを許可するにはサードパーティのライブラリの最新バージョンを持っています。
  2. 'myLib.jar'でパックされているのと同じサードパーティのライブラリを他のライブラリで使用することは、クラスパスの競合を引き起こす可能性があるためです。
  3. ライセンスには非常に注意する必要があります。第三者の図書館は、おそらく特定のライセンスに縛られています。多くのライセンスは互換性がなく、一緒に使用することはできません。

だから、私は最終的に何をしましたか?

@rmlanが私に保証したように、ライブラリのユーザがクラスパスに別のライブラリを追加することに注意することは間違いありません。 これを踏まえて、私は(他の多くは何をすべきか、実際にある)次のフォルダ構造を作成し、1つの圧縮ファイルでそれをzip形式で圧縮しました:

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のか、別のものを使用することができませんでし代わりに、しかし、私はこれが全体の手順をはるかに簡単にすることができる場合。


EDIT: 作成するには「myLib.jar」私はused eclipse

関連する問題