依存関係(推移的な依存関係ではない)内にある特定のファイルをダウンロードから除外する方法があるのかと思っていました。
ビルドをAnt + IvyからGradleに切り替えていますが、これは以前Ivyで行っていました。求めているのは、Artifactoryにコンパイル済みの多くのwsdl jarを含む単一の依存関係があるためです。
Ivyでは、次のような設定でした。
これら6つのアーティファクトは、1つのディレクトリrepo/dep.location/example/7.3/jarのArtifactoryに公開されます。
<publications>
<artifact name="foo-1-0" type="jar" />
<artifact name="foo-1-0-async" type="jar" />
<artifact name="foo-1-0-xml" type="jar" />
<artifact name="bar-1-0" type="jar" />
<artifact name="bar-1-0-async" type="jar" />
<artifact name="bar-1-0-xml" type="jar" />
</publications>
これは、6つのアーティファクトのうち2つだけを取得する方法です。
<dependency org="dep.location" name="example" rev="7.3"
conf="compile,runtime">
<include name="foo-1-0-async"/>
<include name="foo-1-0-xml"/>
</dependency>
現在、Gradleで同様のことを行おうとすると、除外は無視され、6つのアーティファクトがすべてダウンロードされます。
compile (group:"dep.location", name:"example", version:"7.3")
{
exclude module:'foo-1-0-xml'
exclude module:'bar-1-0'
exclude module:'bar-1-0-async'
exclude module:'bar-1-0-xml'
}
Gradleバージョン1.8を使用しています。
Gradleにはこれを達成するためのサポートが組み込まれているとは思いませんが、クラスパスからアーティファクトを削除することはできます。
このスレッド に触発され、Gradleフォーラムでこれを思いつきました:
// The artifacts we don't want, dependency as key and artifacts as values
def unwantedArtifacts = [
"dep.location:example": [ "foo-1-0-xml", "bar-1-0", "bar-1-0-async", "bar-1-0-xml"],
]
// Collect the files that should be excluded from the classpath
def excludedFiles = configurations.compile.resolvedConfiguration.resolvedArtifacts.findAll {
def moduleId = it.moduleVersion.id
def moduleString = "${moduleId.group}:${moduleId.name}:${moduleId.version}" // Construct the dependecy string
// Get the artifacts (if any) we should remove from this dependency and check if this artifact is in there
it.name in (unwantedArtifacts.find { key, value -> moduleString.startsWith key }?.value)
}*.file
// Remove the files from the classpath
sourceSets {
main {
compileClasspath -= files(excludedFiles)
}
test {
compileClasspath -= files(excludedFiles)
}
}
Gradleはおそらくファイルをダウンロードしてキャッシュしますが、クラスパスに含めるべきではないことに注意してください。
これがあなたが望むものかどうかはわかりませんが、Spring BootとWildflyを使用しているので、Tomcat-starterモジュールをSpring Boot標準パッケージから削除する必要があります。ただし、コードの状態は次のとおりです。
configurations {
compile.exclude module: "spring-boot-starter-Tomcat"
}
対応するjarがダウンロードされていないか、単にクラスパスにないかどうかは確認していませんが、使用されていないことがわかります。