プロジェクトの Maven のような依存関係管理のための何らかのサポートを構築しようとしています。このために、ビルドスクリプトのクラスパス依存関係として継承したい pom を追加します。私は、ファイルを入力として受け取り、それを解析し、その pom からの依存関係をマップに入れるタスク「継承」を追加するプラグインを作成しました。タスクは、クラスパスから pom を取得するプラグインの apply メソッドで開始されます。
static class InheritDependencyTask extends DefaultTask {
@InputFile
File pomForInheritance
@Input
def dependencyMap
@TaskAction
public void processPom(){
def parsedPom = new XmlSlurper().parse(pomForInheritance)
parsedPom.dependencyManagement.dependencies.dependency.each { dependency ->
def key = dependency.groupId.text() + ":" + dependency.artifactId.text()
String version = dependency.version.text()
if (version.contains("\$")) {
String propertyKey = version.replace("\${", "").replace('}', '')
version = parsedPom.properties.getAt(propertyKey)
}
dependencyMap.put(key, version)
}
}
}
プラグインの適用メソッドで、タスクを追加し、それに依存するようにコンパイルします。
project.compileJava.dependsOn("inherit")
project.task("inherit", type: InheritDependencyTask){
dependencyMap = project.dependencyMap
pomForInheritance = project.buildscript.configurations.classpath.find { File dependency -> (dependency.name.contains(MY_ARTIFACT_ID) )}
}
別の時点で、依存関係をループし、pom から取得したバージョンに従ってバージョンを変更します。
これはすべてうまくいくようです。しかし、compileJava は決して最新ではありません。常に再コンパイルする必要があります。私は何か間違ったことをしていますか、それともgradleはクラスパスファイルが変更されていないことを確認できませんか?
よろしく、アルネ