【问题标题】:Adding jcenter() in rootlevel repositories breaks my build在根级存储库中添加 jcenter() 会破坏我的构建
【发布时间】:2018-07-30 23:35:32
【问题描述】:

我有一个带有 Gradle 构建脚本的项目,我添加了 bmuschko/gradle-docker-plugin 以在新构建上创建和推送图像。

但是,如果我不在根级存储库中指定 jcenter(),我将无法使用该插件,但这会破坏我的构建,所以我有点迷路了。

如果我添加根级别 jcenter() 它会导致构建失败:

无法解析配置“:compileClasspath”的所有依赖项。

找不到 com.sleepycat:je:7.0.6。在以下位置搜索:

要求:项目:> org.jpos:jpos:2.1.1

但是,如果我不添加它,我会得到:

无法解析配置 ':dockerJava' 的所有依赖项。

找不到 com.aries:docker-java-shaded:3.1.0-rc-3。在以下位置搜索:

要求:项目:

我是否应该构建带有阴影的 Java 并将其包含在我们的本地 Maven 存储库中?

这是脚本:

buildscript {
    repositories {
        jcenter()
        mavenCentral()
        maven {
            url = 'https://nexus.company.com/content/repositories/snapshots/'
            credentials {
                username 'na'
                password 'na'
            }
        }
    }
    dependencies {
        classpath group: 'com.company.gradle', name: 'cpmgradle', version: '0.1-SNAPSHOT'
        classpath 'com.bmuschko:gradle-docker-plugin:3.4.4'
    }
}

// ADDING THIS BREAKS MY BUILD BUT IS NECESSARY FOR DOCKER PLUGIN TO WORK
repositories {
    jcenter()
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'com.company.gradle.java'
apply plugin: 'com.bmuschko.docker-remote-api'

projectinfo {
    group = 'com.company.mesb'
    artifact = 'MESB'
    version = '1.29.DEV-SNAPSHOT'
    description = 'MESB'
    packaging = 'jar'
}

dependencies {
    compile 'org.jpos:jpos:2.1.1'
    compile 'org.jdom:jdom2:2.0.6'
    compile 'org.json:json:20140107'
    compile 'com.company.javasdk:JavaSDK:1.1.JDOM2-SNAPSHOT'
    compile 'com.company.javasdk:Base64:1.0'
    compile 'org.apache.wss4j:wss4j-ws-security-dom:2.0.3'
    compile 'org.apache.santuario:xmlsec:2.0.3'
    compile 'org.slf4j:slf4j-log4j12:1.7.10'
    compile 'com.google.code.gson:gson:2.3.1'
    compile 'org.bouncycastle:bcprov-jdk15on:1.54'
    compile 'org.bouncycastle:bcpkix-jdk15on:1.54'

    compile 'junit:junit:4.12'
    compile 'org.jsoup:jsoup:1.9.2'
    compile 'org.apache.commons:commons-lang3:3.4'

    compile 'com.ibm:mq:5.3.07'
    compile 'com.ibm:mq.pcf:5.3.07'
    compile 'com.ibm:mq.jmqi:5.3.07'
    compile 'com.ibm:mq.headers:5.3.07'
    compile 'com.ibm:mq.commonservices:5.3.07'
    compile 'com.ibm:connector:1.0.0'

    runtime 'jaxen:jaxen:1.1.6'
    runtime 'xalan:xalan:2.7.2'
    runtime 'org.postgresql:postgresql:8.0-311.jdbc3'
    runtime 'commons-logging:commons-logging:1.2'
}

compileJava {
    sourceCompatibility = 1.6
    targetCompatibility = 1.6
    options.fork = true
    options.compilerArgs << '-XDignore.symbol.file'
    options.forkOptions.executable = 'javac'
}

task libs(type: Copy) {
    description = "Copies dependencies to the 'lib' directory of the deployment."
    def libsDir = new File("$buildDir", 'libs')
    libsDir.mkdirs()
    def dockerDir = new File("$buildDir", 'docker')
    dockerDir.mkdirs()
    from project.configurations.runtime
    into libsDir
}

task bundleZip(type: Zip) {
    from projectDir

    include 'xsl/**'
    include 'conf/**'
    include 'js/**'
    include 'test/**'
    include 'mesb.sh'

    from(tasks.libs.outputs) {
        include 'MESB*'
    }

    into project.projectinfo.version
}

tasks.bundleZip.dependsOn jar
tasks.bundleZip.dependsOn libs

def dockerUsername = project.properties['dockerUsername'] ?: ""
def dockerPassword = project.properties['dockerPassword'] ?: ""
docker {
    registryCredentials {
        username = dockerUsername
        password = dockerPassword
    }
}

task buildImage(type: com.bmuschko.gradle.docker.tasks.image.DockerBuildImage) {
    doFirst {
        copy {
            from "${buildDir}/libs/MESB-${projectinfo.version}.jar"
            into "${buildDir}/docker"
            rename { String fileName ->
                fileName.replace("-${projectinfo.version}", "")
            }
        }
        copy {
            from "docker/jdk/Dockerfile"
            into "${buildDir}/docker"
        }
        copy {
            from "xsl"
            into "${buildDir}/docker/xsl"
        }
        copy {
            from "conf"
            into "${buildDir}/docker/conf"
        }
        copy {
            from "test"
            into "${buildDir}/docker/test"
        }
        copy {
            from "${buildDir}/libs"
            into "${buildDir}/docker/libs"
        }
    }
    inputDir = project.file("${buildDir}/docker")
    tag = "company/mesb:${projectinfo.version}"
}
tasks.buildImage.dependsOn build

task pushImage(type: com.bmuschko.gradle.docker.tasks.image.DockerPushImage) {
    imageName = "company/mesb"
    tag = "${projectinfo.version}"
}
tasks.pushImage.dependsOn buildImage

artifacts {
    archives bundleZip
}

/* Remove the default JAR file from the uploaded artifacts */
configurations.archives.artifacts.with { archives ->
    def jarArtifact
    archives.each {
        if (it.file =~ 'jar') {
            jarArtifact = it
        }
    }
    remove(jarArtifact)
}

jar {
    dependsOn configurations.runtime
    manifest {
        attributes 'Main-Class': 'main.MESB'
    }
}

tasks.build.dependsOn libs

sourceSets {
    main {
        java {
            srcDir 'src'
        }
    }
}

【问题讨论】:

    标签: docker gradle build.gradle gradle-plugin


    【解决方案1】:

    显然在应用插件部分移动根存储库定义解决了这个问题。

    apply plugin: 'java'
    apply plugin: 'eclipse'
    apply plugin: 'com.company.gradle.java'
    apply plugin: 'com.bmuschko.docker-remote-api'
    
    
    repositories {
        jcenter()
        mavenCentral()
    }
    

    【讨论】:

    • 顺序在 gradle 脚本中很重要。请务必查看有关特定规则的文档。
    【解决方案2】:

    不知道你是否已经解决了你的问题,但不管怎样......

    我遇到了类似的问题:

    无法解析配置 ':dockerJava' 的所有依赖项。

    找不到 com.aries:docker-java-shaded:3.1.0-rc-3。

    我们通过添加以下内容解决了它

    repositories {
      maven { url "https://repo.spring.io/snapshot" }
      maven { url "https://repo.spring.io/milestone" }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 2021-08-05
      • 1970-01-01
      • 2021-07-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多