在我的gradle依賴關係中,我希望能夠使用'default'版本並使其自動映射到特定版本的庫。從插件訪問配置ResolutionStrategy
例如,我可以在我的build.gradle如下:
dependencies {
compile (group: 'org.hibernate', module: 'hibernate-core', version 'default')
}
對決議我想這給我的
dependencies {
compile (group: 'org.hibernate', module: 'hibernate-core', version '4.3.0.Beta4')
}
等價的映射在文件中指定它包含類似
org.hibernate.hibernate-core=4.3.0.Beta4
這是讀入一個擴展屬性爲typ在名爲versionMap的項目上使用HashMap。
我能得到這個映射在我的build.gradle文件
configurations {
all {
resolutionStrategy {
eachDependency { DependencyResolveDetails details ->
if (details.requested.getVersion() == "default") {
def key = details.requested.getGroup() + "." + details.requested.getName() + ".version.default"
details.useVersion(versionMap.get(key))
}
}
}
}
}
(我必須承認彼得Niederwieser的幫助,讓我這個遠)
如下面的很愉快地工作我需要在我的許多項目中使用相同的功能,因此我已經創建了一個插件項目,並且它的所有構建都很好,但是當我嘗試運行它時,我無法訪問resolutionStrategy來設置邏輯。我的插件代碼如下所示:
import org.gradle.api.Plugin;
import org.gradle.api.Project;
import org.gradle.api.artifacts.DependencyResolveDetails;
import org.gradle.api.artifacts.ConfigurationContainer;
import org.gradle.api.artifacts.ResolutionStrategy;
class DefaultVersionsPlugin implements Plugin<Project> {
@Override
public void apply(Project project) {
def strategy =
{ DependencyResolveDetails details ->
if (details.requested.getVersion() == "default") {
def key = details.requested.getGroup() + "." + details.requested.getName()
details.useVersion(ext.versionMap.get(key))
}
}
ConfigurationContainer configurations = project.getConfigurations();
configurations.each { config ->
println "config: " + config + " - " + config.resolutionStrategy
config.resoultionStrategy.eachDependency{ strategy }
}
}
}
上面的println給出了有效的輸出,但下面的行給出了一個錯誤。運行這個插件的輸出是。
config: configuration ':alerting:archives' - org.gradle.api.internal.artifacts.iv[email protected]e2d0ab
FAILURE: Build failed with an exception.
* Where:
Build file 'C:\trunk\build.gradle' line: 52
* What went wrong:
A problem occurred evaluating root project 'txlibs'.
> Could not find property 'resoultionStrategy' on configuration ':alerting:archives'.
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
BUILD FAILED
Total time: 9.975 secs
有沒有什麼辦法可以用編程方式設置分辨率策略?我嘗試了所有的組合方式來設置這個,但他們都給出了同樣的錯誤。
這只是一個錯字。它應該是resolutionStrategy而不是resoultionStrategy –
任何改變你的插件是開源的?我正在尋找類似的東西 – philbert
不幸的是,這項工作是專有的,我不再與客戶有關係。 – Klunk