2

アプリケーションの展開に必要な特定の構成ファイルを生成する Gradle タスクを作成しています。生成されたファイルの名前と場所をユーザーがカスタマイズできるようにしたいと思います。

タスク クラスの大まかなスケッチは次のようになります。

class ConfigurationFileTask extends DefaultTask {

    String configFileName = 'config.xml'

    File configFilePath = new File(project.buildDir, configFileName) 

}

アイデアは、ユーザーが必要に応じてファイル名またはファイルの場所全体を上書きできるようにすることです。

project上記のコードは実際には機能しないことに気付きましたconfigFile。私の問題は、これを行う正しい方法を見つけ出すことです。

ここで、タスクをより広いビルドで良き市民にしたいと考えています。つまり、他のタスクがそのプロパティを参照できるようにする必要があります。たとえば、ユーザーが次のように書けるようにしたいと思います。

task createConfigFile(type: ConfigurationFileTask) {
    configFileName = 'app-config.xml'
}

jar {
    from(createConfigFile.configFilePath)
}
jar.dependsOn createConfigFile

そして、生成された構成ファイルをjarに追加します。この場合、ユーザーは を設定していますがconfigFileName、 を参照していることに注意してくださいconfigFilePath。つまり、名前が設定された後、しばらくしてからパスを計算する必要があります。

では、ユーザーが設定できるが、別のプロパティに基づくデフォルトを持ち、そのプロパティが他のタスクで使用できる場所を提供するにはどうすればよいでしょうか?

4

1 に答える 1

1

それをメソッドにすると、これは間違いなく機能します

task overrideBoth(type: ConfigurationFileTask) {
    _configFileName = 'app-configb.xml'
    _dir = '../'
}   

task overrideFileName(type: ConfigurationFileTask) {
    _configFileName = 'app-confign.xml'
}

task overridePath(type: ConfigurationFileTask) {
    _dir = '../../'
}

task defaultBehavior(type: ConfigurationFileTask) {
}

class ConfigurationFileTask extends DefaultTask {
    def _configFileName = 'config.xml'
    def _dir = project.buildDir
    def getFile() {
        return new File(_dir,_configFileName)
    }   
}   

task otherTask(type: DefaultTask) {
    println("defaultValues ${defaultBehavior.getFile().canonicalPath}")
    println("overrideFileName ${overrideFileName.getFile().canonicalPath}")
    println("overridePath ${overridePath.getFile().canonicalPath}")
    println("overrideBoth ${overrideBoth.getFile().canonicalPath}")


}   

configFileName がオーバーライドされる

于 2012-06-05T20:03:45.507 に答える