Chr*_*sel 29 artifactory gradle
这是获取artifactory插件的配置:
buildscript {
repositories {
mavenCentral()
maven { url 'http://jcenter.bintray.com' }
}
dependencies {
classpath group:'org.jfrog.buildinfo', name: 'build-info-extractor-gradle', version: '3.0.1'
}
}
apply plugin:'com.jfrog.artifactory'
apply plugin:'ivy-publish'
...some publish spec stuff...
Run Code Online (Sandbox Code Playgroud)
我跑gradle(2.3)然后我得到:
> Failed to apply plugin [id 'com.jfrog.artifactory']
> Cannot cast object 'org.jfrog.gradle.plugin.artifactory.dsl.ArtifactoryPluginConvention@6b6c7be4' with class 'org.jfrog.gradle.plugin.artifactory.dsl.ArtifactoryPluginConvention' to class 'org.jfrog.gradle.plugin.artifactory.dsl.ArtifactoryPluginConvention'
Run Code Online (Sandbox Code Playgroud)
当然看起来像一个类路径问题,但我确实有这个项目和兄弟项目使用同一组gradle/artifactory配置,一个工作,另一个没有.两者都是同一顶级项目的一部分.相同的JDK(1.8.0_20).相同的Gradle.一切都一样.
我很困惑......
Chr*_*sel 20
问题是,当我向兄弟项目添加各种位时,这意味着我有两个项目定义了buildscript {}部分.
buildscript {
...
dependencies {
classpath group:'org.jfrog.buildinfo', name: 'build-info-extractor-gradle', version: '3.0.1'
}
}
Run Code Online (Sandbox Code Playgroud)
显然,这导致了两个不同版本的依赖项存在于类路径中,因此出现了错误.
解决方案是将buildscript位移动到主项目中,因此这些依赖项仅定义一次:
buildscript {
repositories {
maven { url "https://plugins.gradle.org/m2/" }
}
dependencies {
classpath group:'org.jfrog.buildinfo', name: 'build-info-extractor-gradle', version: '3.0.1'
}
}
Run Code Online (Sandbox Code Playgroud)
在使用 Jenkins 构建时,我也遇到了类似的异常。对我来说,冲突在于 Jenkin 的版本和构建脚本中的版本:
为了解决这个问题,构建的 Artifactory 部分有一个标志,您可以检查指定您想要使用 gradle 文件中的版本:
这解决了我的问题。希望能帮助到你。
Here's another potential cause. All of this looks to be a problem with rival classloaders defining the class. The full qualified classes include the loader. so, load A foo.bar is not loader B foo.bar and crossing that divide is a complex dance requiring interfaces and careful definition.
So, when using the Jenkins artifactory plugin to build your gradle project with the gradle artifactory plugin, you must add the usesPlugin or jenkins plugin will generate an init script which adds the gradle plugin on to a class loader.
def server = Artifactory.server "artifactory"
def rtGradle = Artifactory.newGradleBuild()
rtGradle.usesPlugin = true // Artifactory plugin already defined in build script
...
Run Code Online (Sandbox Code Playgroud)
My problem was, desktop build OK, jenkins build shows this post's problem
| 归档时间: |
|
| 查看次数: |
5199 次 |
| 最近记录: |