私はこれを数日間続けてきました。私は現在、かなりの数のantスクリプトをgradleに変換することを任されています。私はどちらかの複雑さにあまり慣れていないので、私の無知を許してください。Ant to Gradle:実行可能なJAR変換
これはオフラインPC用のものなので、私は依存関係やリポジトリをコードに使用しませんが、私が必要とするすべてのクラスとjarファイルはローカルで利用できます。今のところ変換は進んでいますが、私は実行可能なjarタスクの変換にむしろ固執しています。
<target name="makeJar">
<jar destfile="someJar.jar">
<fileset dir="somePlace"/>
<fileset dir="someOtherPlace"/>
<manifest>
<attribute name="Main-Class" value="SOME.ARCHIVE.Main"/>
</manifest>
<zipgroupfileset dir="localFiles" includes="*.jar"/>
</jar>
</target>
SOME.ARCHIVEは、ローカル.jarファイルの一つである:
これは、Antスクリプト(基本的に)です。私の大きな問題は、私がgradleスクリプトを実行すると、すべてのクラスとjarファイルが一緒に読み込まれて、ちょうどそれらが圧縮されるためです。実行可能ファイルではありません。 (これにより、SOME.ARCHIVEのメインクラスが見つかりません) 抽出された.jarsをスクリプトと比較し、ディレクトリ構造には非常に大きな違いがあります。 gradleスクリプトは生成されません。
私はzipgroupfilesetの効果をどのように再現するのか分かりません。私が回避することができると仮定する方法は、過剰な(jarファイルの抽出、クラスファイルを含むディレクトリへのコピー、そのディレクトリのjarファイル)と思われます。その時点では、antスクリプトをインポートしてgradleから実行する方が理にかなっているようですが、そうしたくないと思います。
task makeJar (type: Jar) {
baseName = "someJar"
from files('somePlace')
from files('someOtherPlace')
from fileTree(dir: 'localFiles', include: '*.jar')
manifest {
attributes 'Main-Class': 'SOME.ARCHIVE.Main'
}
}
EDIT:
は、ここに私のGradleスクリプトだ私は私のために働いていたものを掲載しました。 JBirdVegasの答えは、これを実行するより適切な方法でしょう。
configuration.compile.collectの実装方法は厳密にはわかりませんが、zipTree(fileTreeを使用するのではなく)を反復することは、私が必要としていたものとまったく同じです。 – AlexG
'configurations.compile.collect'はあなたのjarのクラスを出力に自動的に引き込みます。 jarを特に指定する代わりに、 'configuration'オブジェクトを使用することを歓迎します。これにより、libsを追加するときに' dependencies'ブロックのみを更新することができます。 'configuration'オブジェクトは' project'オブジェクトから利用できます。 'configuration'の詳細については、https://docs.gradle.org/current/dsl/org.gradle.api.artifacts.Configuration.htmlを参照してください。 – JBirdVegas