8

Gradle を使用して、.xml ファイルを含む jar ファイルをビルドしていますMETA-INF。このファイルには次のような行があります

<property name="databasePlatform" value="${sqlDialect}" />

環境ごとに異なる SQL データベースを使用できるようにします。${sqlDialect}プロジェクトのプロパティから展開するようgradleに伝えたいです。

私はこれを試しました:

jar {
    expand project.properties
}

しかし、Jarタスクがファイル内のGroovyRuntimeExceptionプロパティも展開しようとするように思えます。.classそれで、私は試しました

jar {
    from(sourceSets.main.resources) {
        expand project.properties
    }
}

上記の例外はスローされませんが、代わりにすべてのリソースが 2 回コピーされます。1 回はプロパティ拡張あり、もう 1 回はなしです。私はこれを回避することができました

jar {
    eachFile {
        if(it.relativePath.segments[0] in ['META-INF']) {
            expand project.properties
        }
    }
}

私のユースケースでは、META-INFディレクトリ内のファイルのプロパティを展開するだけでよいので、これは私が望むことを行います。しかし、これはかなり醜いハックのように感じます。これを行うより良い方法はありますか?

4

5 に答える 5

10

別の、しかし密接に関連する問題に関するスレッドで、この投稿に出くわしました。processResourcesタスクではなく、タスクjarを構成したいことがわかりました。

processResources {
    expand project.properties
}

しかし、何らかの理由で、cleanGradle が変更に気付く前に、私は 1 回しなければなりませんでした。

于 2013-06-24T12:56:34.153 に答える
1

マルチモジュールプロジェクトで私(Gradle 4.0.1)のために働いたのは次のとおりです。

/webshared/build.gradle:

import org.apache.tools.ant.filters.*

afterEvaluate {
    configure(allProcessResourcesTasks()) {
        filter(ReplaceTokens,
                tokens: [myAppVersion: MY_APP_VERSION])
    }
}


def allProcessResourcesTasks() {
    sourceSets*.processResourcesTaskName.collect {
        tasks[it]
    }
}

私のMY_APP_VERSION変数は最上位build.gradleファイルで定義されています:

ext {

    // application release version.
    // it is used in the ZIP file name and is shown in "About" dialog.
    MY_APP_VERSION = "1.0.0-SNAPSHOT"
}

私のリソースファイルは次の場所にあります/webshared/src/main/resources/version.properties

# Do NOT set application version here, set it in "build.gradle" file
# This file is transformed/populated during the Gradle build.
version=@myAppVersion@
于 2017-07-09T05:55:08.457 に答える
0

最初の試みを実行して、テスト プロジェクトを作成しました。jenkins プラグインの pom ファイルを./src/main/resources/META-INF/. 私はそれが十分に良いxmlの例だと思います。artifactId 行を次のように置き換えました。

<artifactId>${artifactId}</artifactId>

私のbuild.gradle:

apply plugin: 'java'

jar {
    expand project.properties
}

gradle jarプロパティの値を定義するのを忘れたため、初めて実行したときに爆発しました。2 回目の試行は、次のコマンドラインで成功しました。

 gradle jar -PartifactId=WhoCares

テスト目的で、-P を使用してプロパティを定義しました。プロパティをどのように定義しようとしているのかはわかりませんが、おそらくそれが欠けている部分です。あなたの例外のスタックトレースを見なければ、確かに知るのは難しいですが、上記の例は私にとっては完璧に機能し、あなたの問題を解決しているようです.

于 2013-06-24T12:53:36.860 に答える