0

Mavenリポジトリに公開する必要がある単一のプロジェクトから複数のjarを作成しようとしていますが、アーティファクトの詳細を正しく取得できないようです。

私がsources-jarを処理するのを見た例から、各jarを作成する必要があるいくつかのタスクを(動的に)作成しようとしました。

def environments = ['local', 'dev', 'test', 'acc', 'prod']

environments.each { e ->
    task "create${e}jar"(type: Jar, dependsOn: classes) << {
       def dir = filterPropertiesForEnv(e)

       from (dir)
       classifier = e
    }

    artifacts.add('archives', tasks["create${e}jar"])
}


File filterPropertiesForEnv(envName) {
    println "filter for $envName"
    def destDir = new File(project.buildDir, envName)

    destDir.mkdir()

    // Do filter stuff based on each envName

    destDir
}

「インストール」タスクを実行すると、動的に作成されたタスク「create [name] jar」が実行されますが、jarファイルは作成されません。doLast-"<<"を削除すると、ビルドによっていくつかのjarファイルが生成されますが、jarファイルは他のすべてが実行される前に(configure-stage中に)ビルドされるため、マニフェストファイルのみが含まれます。

複数のjarファイルを作成し、それらをアーティファクトとしてアタッチするためのより良い方法はありますか?また、このjarが含まれている同じパターンに基づいて複数のearファイルを作成する必要があるため、再利用可能なソリューションを見つけると便利です。私はMavenに精通していますが、Gradleは新しい知り合いであり、この種の問題をどのように構成するかについてはあまり理解していません。

4

2 に答える 2

1

この問題についてさらに調査した結果、fromメソッドにクロージャを追加すると、評価は構成時ではなく実行時に行われることがわかりました。

その場合、実用的な解決策は次のようになります。

def environments = ['local', 'dev', 'test', 'acc', 'prod']

environments.each { e ->
    task "create${e}jar"(type: Jar, dependsOn: classes) << {

       from {
           filterPropertiesForEnv(e)
       }
       classifier = e
    }

    artifacts.add('archives', tasks["create${e}jar"])
}


File filterPropertiesForEnv(envName) {
    println "filter for $envName"
    def destDir = new File(project.buildDir, envName)

    destDir.mkdir()

    // Do filter stuff based on each envName

    destDir
}
于 2013-02-15T20:05:13.637 に答える
0

では、環境ごとに異なるjarを公開したいですか?そして、uploadArchivesタスクでそれらを公開しますか?

これを行うための最良の方法は、おそらく環境ごとにサブプロジェクトを作成することです。そうすれば、すべてのサブプロジェクトに対してアップロードタスクを実行できます。投稿したコードから、さまざまなディレクトリにさまざまな環境のコードがすでにあるようです。

1つの大きなコードベースからさまざまなファイルをフィルタリングしてさまざまな環境用のJarファイルを作成しようとするクレイジーな作業をしている場合、それはおそらく機能しません。

于 2013-02-13T22:46:14.420 に答える