我的grails flyway插件的可传递依赖性有问题<代码>组织。圣杯。插件:grails flyway:0.2.1声明了对org的依赖关系。flywaydb:flyway核心:4.0.1。当我将插件包含到Grails 3.1.6项目中时,Gradle将Flyway降级到3.2.1版本。
+--- org.grails.plugins:grails-flyway:0.2.1
| \--- org.flywaydb:flyway-core:4.0.1 -> 3.2.1
我的Gradle构建文件如下所示
buildscript {
ext {
grailsVersion = project.grailsVersion
}
repositories {
maven { url "https://repo.grails.org/grails/core" }
}
dependencies {
classpath "org.grails:grails-gradle-plugin:$grailsVersion"
classpath "com.bertramlabs.plugins:asset-pipeline-gradle:${assetPipelinePluginVersion}"
classpath "org.grails.plugins:hibernate5:5.0.5"
classpath 'com.github.ben-manes:gradle-versions-plugin:0.12.0'
}
}
version "0.40.15"
group "zsc.supporter"
apply plugin: "war"
apply plugin: "org.grails.grails-web"
apply plugin: "org.grails.grails-gsp"
apply plugin: "org.grails.grails-doc"
apply plugin: "asset-pipeline"
apply plugin: 'com.github.ben-manes.versions'
ext {
grailsVersion = project.grailsVersion
gradleWrapperVersion = project.gradleWrapperVersion
}
repositories {
maven { url "https://repo.grails.org/grails/core" }
maven { url "https://dl.bintray.com/saw303/plugins" }
}
dependencyManagement {
imports {
mavenBom "org.grails:grails-bom:$grailsVersion"
}
applyMavenExclusions false
}
dependencies {
compile "org.springframework.boot:spring-boot-starter-logging"
compile "org.springframework.boot:spring-boot-autoconfigure"
compile "org.grails:grails-core"
compile "org.springframework.boot:spring-boot-starter-actuator"
compile "org.springframework.boot:spring-boot-starter-tomcat"
compile "org.grails:grails-dependencies"
compile "org.grails:grails-web-boot"
compile "org.grails.plugins:cache"
compile "org.grails.plugins:scaffolding"
compile "org.grails.plugins:hibernate4"
compile "org.hibernate:hibernate-ehcache"
console "org.grails:grails-console"
profile "org.grails.profiles:web:3.1.6"
runtime "com.bertramlabs.plugins:asset-pipeline-grails:${assetPipelinePluginVersion}"
runtime "com.h2database:h2"
testCompile "org.grails:grails-plugin-testing"
testCompile "org.grails.plugins:geb"
testRuntime "org.seleniumhq.selenium:selenium-htmlunit-driver:2.52.0"
testRuntime "net.sourceforge.htmlunit:htmlunit:2.21"
compile "org.grails.plugins:spring-security-core:3.0.4"
compile "org.grails.plugins:quartz:2.0.8"
compile "org.grails.plugins:mail:2.0.0.RC4"
compile "eu.bitwalker:UserAgentUtils:1.18"
compile 'org.mnode.ical4j:ical4j:1.0.7'
compile 'org.grails.plugins:browser-detection:3.1.0'
compile "com.googlecode.libphonenumber:libphonenumber:7.3.1"
runtime 'org.grails.plugins:grails-flyway:0.2.1'
testCompile "org.grails.plugins:grails-wizer:0.3"
testCompile 'org.grails:grails-datastore-test-support:5.0.5.RELEASE'
runtime 'mysql:mysql-connector-java:5.1.29'
}
task wrapper(type: Wrapper) {
gradleVersion = gradleWrapperVersion
}
assets {
minifyJs = true
minifyCss = true
}
目前我不明白为什么Gradle会降低我的传递依赖性。有人能提供这个吗?
我知道我可以在我的构建中强制实现flyway core:4.0.1的依赖关系。gradle,但我想了解降级的原因。
UPDATE-1
当我运行
gradle依赖项|grep flyway
时,我得到以下输出。
+--- org.grails.plugins:grails-flyway:0.2.1
| \--- org.flywaydb:flyway-core:4.0.1 -> 3.2.1
+--- org.grails.plugins:grails-flyway:0.2.1
| \--- org.flywaydb:flyway-core:4.0.1 -> 3.2.1
+--- org.grails.plugins:grails-flyway:0.2.1
| \--- org.flywaydb:flyway-core:4.0.1 -> 3.2.1
+--- org.grails.plugins:grails-flyway:0.2.1
| \--- org.flywaydb:flyway-core:4.0.1 -> 3.2.1
请在pastebin找到完整的输出。
grails-flyway
插件及其pom.xml可以在Bintray找到。
更新-2
根据Gradles参考,我试图强制Gradle使用
org.flywaydb: flyway-core: 4.0.1
。
configurations.all {
resolutionStrategy.force 'org.flywaydb:flyway-core:4.0.1'
}
这不会影响问题。依赖关系树仍然使用flyway core的3.2.1版。
+--- org.grails.plugins:grails-flyway:0.2.1
| \--- org.flywaydb:flyway-core:4.0.1 -> 3.2.1
更新-3
Gradles
dependencyInsight
命令
gradle dependencyInsight --dependency flyway-core --configuration runtime
结果在
:dependencyInsight
org.flywaydb:flyway-core:3.2.1 (selected by rule)
org.flywaydb:flyway-core:4.0.1 -> 3.2.1
\--- org.grails.plugins:grails-flyway:0.2.1
\--- runtime
什么是“代码”(按规则选择)
?
“解决方案”-或如何解决
我找不到导致Gradle使用flyway core:3.2.1而不是flyway core:4.0.1的规则。但我找到了解决问题的方法。
我在我的构建中添加了以下内容。gradle修改我的gradle运行时解析策略。
configurations.runtime.resolutionStrategy {
eachDependency { DependencyResolveDetails det ->
if (det.requested.name == 'flyway-core' && det.requested.group == 'org.flywaydb') {
det.useVersion(det.requested.version)
}
}
}
转到您的Gradle缓存文件夹:
cd ~/.gradle/caches/modules-2/files-2.1
搜索此版本号:
grep -r "3.2.1" *
您将发现哪个pom文件正在使用此版本,通常是在spring-boot-dependencies-x.y.z.RELEASE中。pom:
<flyway.version>3.2.1</flyway.version>
......
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
<version>${flyway.version}</version>
</dependency>
这意味着,如果使用spring boot,它将覆盖某些依赖版本。
您可以通过在gradle.properties
文件中添加以下行再次覆盖它:
flyway.version=4.0.1
我遇到了一个类似的问题,为此浪费了几个小时。所以我把这些信息留在这里,希望如果你陷入这个问题,这可以节省你的时间
导致它的原因是spring-boot-依赖项-1.3.3。RELEASE. pom
这迫使flyway版本为3.2.1
根据Spring Boot文档,您应该能够在构建中添加这样的行。渐变:<代码>分机['flyway.version']=“4.0.1”<代码>
我在Liferay DXP中为Google Analytics API编写了代码。我已经通过在build.gradle中编写来导入了以下jar 此外,我还使用以下代码将其包含在bnd.bnd文件中: 该模块编译良好,我能够得到JAR。但是当我在服务器上部署这个jar时,我总是得到未解决的需求:import-package:error。 我知道问题出在传递依赖上。我在Liferay社区的某个地方读到
问题内容: 为什么我应该(或不应该)将gradle依赖项包含为, 有什么好处/缺点? 如您所见,我在支持它的下面的库中添加了@aar。但是一切似乎都还没有做完… 问题答案: 在大多数情况下,您可以使用或上载多种格式的库。 如果不指定后缀,则将以其默认格式(由作者定义,如果不是,则以默认格式)以及所有依赖项下载该库。 指定后缀时,将强制以指定的格式(可能存在或可能不存在)下载库。这很有用,例如当作者
null 使用Jenkins Artifactory插件,我能够将这两个模块的JAR发布到Artifactory,但我的另一个依赖于的项目未能构建,出现以下gradle错误 找不到com.mygroup:lib-api:1.0.0-snapshot lib-api/build.gradle null null 我的理解是,ArtiFactory/Gradle应该足够聪明,能够将解析为最新的时间戳快
当我有一个包含POM的项目时,例如: 但是我似乎弄错了,Internet上的Maven文档并没有帮助我解决这个问题。 有什么想法吗?
我创建了一个简单的示例(名称实际上并不意味着什么): GradleMultiProject\core\src\main\java\core.java 堆芯建造
这个问题将澄清什么是传递依赖,以及它在Maven中如何在非常高的级别上工作。 我的定义是:在依赖树中,比如-- 若C在B中有范围编译,那个么将B声明为A的依赖项就足以用Maven构建A。但是,如果C在B中提供了作用域,那么当Maven构建A时,除非A在其依赖项中声明C,否则该构建不会根据C自动编译A。 这是正确的吗?