[〜#〜] jar [〜#〜] ファイルの束を1つのJARファイルに簡単にマージするツールまたはスクリプトはありますか?ボーナスは、メインファイルマニフェストを簡単に設定し、実行可能にすることです。
具体的なケースは、 Java再構成テキストツール です。私は次のようなものでそれを実行したいと思います:
Java -jar rst.jar
私が知る限り、それは簡単な単一ファイルツールであってはならないことを示す依存関係はありませんが、ダウンロードしたZipファイルには多くのライブラリが含まれています。
0 11-30-07 10:01 jrst-0.8.1/
922 11-30-07 09:53 jrst-0.8.1/jrst.bat
898 11-30-07 09:53 jrst-0.8.1/jrst.sh
2675 11-30-07 09:42 jrst-0.8.1/readmeEN.txt
108821 11-30-07 09:59 jrst-0.8.1/jrst-0.8.1.jar
2675 11-30-07 09:42 jrst-0.8.1/readme.txt
0 11-30-07 10:01 jrst-0.8.1/lib/
81508 11-30-07 09:49 jrst-0.8.1/lib/batik-util-1.6-1.jar
2450757 11-30-07 09:49 jrst-0.8.1/lib/icu4j-2.6.1.jar
559366 11-30-07 09:49 jrst-0.8.1/lib/commons-collections-3.1.jar
83613 11-30-07 09:49 jrst-0.8.1/lib/commons-io-1.3.1.jar
207723 11-30-07 09:49 jrst-0.8.1/lib/commons-lang-2.1.jar
52915 11-30-07 09:49 jrst-0.8.1/lib/commons-logging-1.1.jar
260172 11-30-07 09:49 jrst-0.8.1/lib/commons-primitives-1.0.jar
313898 11-30-07 09:49 jrst-0.8.1/lib/dom4j-1.6.1.jar
1994150 11-30-07 09:49 jrst-0.8.1/lib/fop-0.93-jdk15.jar
55147 11-30-07 09:49 jrst-0.8.1/lib/activation-1.0.2.jar
355030 11-30-07 09:49 jrst-0.8.1/lib/mail-1.3.3.jar
77977 11-30-07 09:49 jrst-0.8.1/lib/servlet-api-2.3.jar
226915 11-30-07 09:49 jrst-0.8.1/lib/jaxen-1.1.1.jar
153253 11-30-07 09:49 jrst-0.8.1/lib/jdom-1.0.jar
50789 11-30-07 09:49 jrst-0.8.1/lib/jewelcli-0.41.jar
324952 11-30-07 09:49 jrst-0.8.1/lib/looks-1.2.2.jar
121070 11-30-07 09:49 jrst-0.8.1/lib/junit-3.8.1.jar
358085 11-30-07 09:49 jrst-0.8.1/lib/log4j-1.2.12.jar
72150 11-30-07 09:49 jrst-0.8.1/lib/logkit-1.0.1.jar
342897 11-30-07 09:49 jrst-0.8.1/lib/lutinwidget-0.9.jar
2160934 11-30-07 09:49 jrst-0.8.1/lib/docbook-xsl-nwalsh-1.71.1.jar
301249 11-30-07 09:49 jrst-0.8.1/lib/xmlgraphics-commons-1.1.jar
68610 11-30-07 09:49 jrst-0.8.1/lib/sdoc-0.5.0-beta.jar
3149655 11-30-07 09:49 jrst-0.8.1/lib/xalan-2.6.0.jar
1010675 11-30-07 09:49 jrst-0.8.1/lib/xercesImpl-2.6.2.jar
194205 11-30-07 09:49 jrst-0.8.1/lib/xml-apis-1.3.02.jar
78440 11-30-07 09:49 jrst-0.8.1/lib/xmlParserAPIs-2.0.2.jar
86249 11-30-07 09:49 jrst-0.8.1/lib/xmlunit-1.1.jar
108874 11-30-07 09:49 jrst-0.8.1/lib/xom-1.0.jar
63966 11-30-07 09:49 jrst-0.8.1/lib/avalon-framework-4.1.3.jar
138228 11-30-07 09:49 jrst-0.8.1/lib/batik-gui-util-1.6-1.jar
216394 11-30-07 09:49 jrst-0.8.1/lib/l2fprod-common-0.1.jar
121689 11-30-07 09:49 jrst-0.8.1/lib/lutinutil-0.26.jar
76687 11-30-07 09:49 jrst-0.8.1/lib/batik-ext-1.6-1.jar
124724 11-30-07 09:49 jrst-0.8.1/lib/xmlParserAPIs-2.6.2.jar
ご覧のとおり、これを手動で行う必要はありません。
これまでのところ、AutoJarとProGuardだけを試しましたが、どちらも実行するのはかなり簡単でした。 JARファイルの定数プールに問題があるようです。
どうやらjrstはわずかに壊れているので、修正に取り掛かります。 Mavenpom.xml
ファイルも明らかに壊れていたので、jrstを修正する前にそれを修正する必要があります...私はバグ磁石のように感じます:-)
更新:このアプリケーションを修正することはできませんでしたが、太いJARに基づいた Eclipse の「Runnable JAR export wizard」をチェックアウトしました。これは、自分のコードをデプロイするのに非常に使いやすいことがわかりました。
他の優れた提案のいくつかは、Eclipse以外の環境でのビルドに適している場合があります。ossは、おそらく Ant を使用してNiceビルドを作成する必要があります。 (Maven、これまでのところ私に痛みを与えたが、他の人はそれを愛している。)
Eclipse 3.4 JDTのRunnable JARエクスポートウィザード。
Eclipse 3.5では、これが拡張されています。参照されたJARファイルの処理方法を選択できるようになりました。
Antのzipfileset
が仕事をする
<jar id="files" jarfile="all.jar">
<zipfileset src="first.jar" includes="**/*.Java **/*.class"/>
<zipfileset src="second.jar" includes="**/*.Java **/*.class"/>
</jar>
いくつかの異なるソリューションを試してみたところ、 One-JAR が最も使いやすく、まさにそれを実現することができました。必要なものすべてを含む単一の実行可能なJARを作成しました。
One-JARは、ネストされたリソースをナビゲートできるカスタムクラスローダーを使用します。ダウンロードの.batファイルを見てください。jrst-0.8.1.jarのorg.codelutin.jrst.JRSTがメインクラスであるため、マニフェストは次のようになります。
Main-Class: com.simontuffs.onejar.Boot
One-Jar-Main-Class: org.codelutin.jrst.JRST
本当にクールなのは、One-JARがコマンドライン引数の受け渡しを処理することです。クラスパスは、必要なすべてのリソースが単一のJARにバンドルされていると想定して、カスタムクラスローダーによって処理されます。
One-JARを使用する最も簡単な方法は、antを使用することです。次のように機能するカスタム「1 jar」アリタスクがあります(マニフェストが「rst.mf」と呼ばれる場合):
<target name="jar-rst">
<one-jar destfile="rst.jar" manifest="rst.mf">
<main jar="jrst-0.8.1.jar" />
<lib>
<fileset dir="${pathToJars}">
<include name="batik-util-1.6-1.jar" />
<include name="icu4j-2.6.1.jar" />
<include name="commons-collections-3.1.jar" />
<!-- Snip -->
</fileset>
</lib>
</one-jar>
</target>
Maven ユーザーの場合、通常、Assemblyプラグインは必要な処理を行います。場合によっては、shadeプラグイン、場合によっては組み合わせを行います。
Assemblyプラグインを使用すると、必要な設定を使用してプロジェクトにマニフェストファイルを配置しますが、通常はデフォルトで十分です。その後、構築が完了します
mvn Assembly:assembly
または、より特別な対処が必要な場合は、他の目標の1つです。含めるすべてのJARファイルは、Mavenの依存関係リゾルバーによって選択されます。シェードプラグインを使用する場合、通常、それはインストールの目標の一部であり、私が現在行っている特定のプロジェクトでは
mvn install
mvn Assembly:single
Assembly:single
目標は、この場合の Spring アプリケーションでのライフタイムの問題を回避することです。
JarJar を使用すると、パッケージシャドウイングを使用して、JARファイルが他のファイルと競合しないようにすることができます。
ProGuard があり、JARファイルを1つにパックするだけでなく、クラスファイルを最適化、クリーンアップ、または難読化し、結果のJARファイルを以前のすべてのJARファイルの合計よりもはるかに小さくすることもできます。
実際にJRSTツールを使用してProGuardを試しましたが、報告どおりです。問題を追跡してみましたが、jrstが参照するICU4Jライブラリの バグ に関連していることがわかりました。問題は、使用されているICUバージョンは今のところはるかに古いことです。だから私はicu.jar
ファイルとICU4Jバージョン3.2。 ProGuardは、JRSTのライブラリとの不整合に関する他のエラー/警告を多数見つけました。
私の推測では、ProGuardは期待どおりに機能しますが、jrstのライブラリは一貫していません。開発者はプロジェクトの依存関係をチェックして更新する必要があるため、開発者と話す以上のことができるかどうかはわかりません。
(アンドリアンのものに基づく):
<jar id="files" jarfile="all.jar">
<zipgroupfileset dir="${library.dir}" includes="*.jar" excludes="test-helper.jar"/>
<zipfileset src="first.jar" includes="**/*.Java **/*.class"/>
<zipfileset src="second.jar" includes="**/*.Java **/*.class"/>
<fileset dir=".">
<include name="LICENSE"/>
<include name="NOTICE"/>
</fileset>
</jar>
One-JAR 0.97は http://one-jar.sourceforge.net でリリースされたばかりで、 Spring および-などのフレームワークのサポートで拡張されました。 Guice 、これは他のアプローチに問題を引き起こす可能性があります。また、一部のJARファイルがOne-JARの外部にあるクラスローダーの反転も処理します(たとえば、 [〜#〜] jdbc [〜#〜] 出荷されない場合があるドライバー)。
One-JARはコマンドラインで、 Ant および Maven 2つのプラグインがあります。 「jar」ツールを使用してビルドするのも簡単です。
また、Ference Hechlerが書いたEclipse Jar Exporter(Runnable)をお勧めします。彼は、JARファイルのセットをラップする簡単なアプローチを考え出すのに素晴らしい仕事をしました。彼と私はOne-JARに取り組みましたが、Jar Exporterは別のコードベースに基づいています。
または、Maven Assemblyプラグイン(mvn Assembly:assembly)を使用します
autojar というツールがあります。これは、バイトコードをスキャンし、参照された(インポートされた)クラスを含め、見つかったクラスで.jarファイルをコンパイルします。
ただし、Springなどの構成では常に機能するとは限りません。構成ではクラス名を指定すると、フレームワークによってロードされます。
ここで必要なツールはJarSpliceだと思います: http://ninjacave.com/jarsplice
Ant(またはMavenを必要とし、独自のGUIを必要とし、notを実行します。使用して、要求どおりに正確に実行します->複数のjarファイルのコンテンツを単一のjarファイルにマージします(独自のクラスローダーを追加する必要があることに注意してください)。
そのためには、Mavenシェーディングプラグインを使用する必要があります。私はよくmavenを使用してスタンドアロンjarファイルを作成しますが、これは非常に強力です
続きを見る:
http://maven.Apache.org/plugins/maven-shade-plugin/examples/includes-excludes.html