Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Maven 使用Gradle Artifactory插件发布子项目_Maven_Gradle_Publish_Artifactory - Fatal编程技术网

Maven 使用Gradle Artifactory插件发布子项目

Maven 使用Gradle Artifactory插件发布子项目,maven,gradle,publish,artifactory,Maven,Gradle,Publish,Artifactory,我有以下多项目渐变构建: myapp/ myapp-client/ build.gradle src/** (omitted for brevity) myapp-shared/ build.gradle src/** (omitted for brevity) myapp-server build.gradle src/** (omitted for brevity)

我有以下多项目渐变构建:

myapp/
    myapp-client/
        build.gradle
        src/** (omitted for brevity)
    myapp-shared/
        build.gradle
        src/** (omitted for brevity)
    myapp-server
        build.gradle
        src/** (omitted for brevity)
    build.gradle
    settings.gradle
其中
myapp/build.gradle
看起来像:

subprojects {
    apply plugin: 'groovy'
    sourceCompatibility = '1.7'
    targetCompatibility = '1.7'
    [compileJava, compileTestJava]*.options*.encoding = 'UTF-8'

    repositories {
        mavenCentral()
        maven {
            // My local/private Artifactory
            url "http://localhost:8081/artifactory/myapp-snapshots"
        }
    }

    dependencies {
        compile (
            'org.codehaus.groovy:groovy-all:2.3.7'
        )
    }
}
其中3个子项目Gradle文件目前都非常简单:

dependencies {
    compile (
        'org.apache.commons:commons-lang3:3.3.2'
    )
}
以下是我努力实现的目标:

  • 当我从父
    myapp
    目录运行
    gradle clean build-Pversion=0.1.5
    时,我希望所有三个子项目都使用0.1.5版本构建;因此
    myapp-client-0.1.5.jar
    myapp-shared-0.1.5.jar
    myapp-server-0.1.5.jar
    。目前我的构建已经做到了这一点,但是
  • 如果客户端和共享JAR构建成功,我还希望将它们发布到我的私有Artifactory repo。(我不想发布服务器JAR)
为了将Gradle构建的JAR发布到Artifactory,我能够找到并测试/确认的最紧凑的代码是:

buildscript {
    repositories {
        maven {
            url 'http://localhost:8081/artifactory/plugins-release'
            credentials {
                username = "admin"
                password = "12345"
            }
            name = "maven-main-cache"
        }
    }
    dependencies {
        classpath "org.jfrog.buildinfo:build-info-extractor-gradle:3.0.1"
    }
}

apply plugin: 'maven-publish'
apply plugin: "com.jfrog.artifactory"

repositories {
    add buildscript.repositories.getByName("maven-main-cache")
    maven {
        url "http://localhost:8081/artifactory/myapp-snapshots"
    }
}

artifactory {
    contextUrl = "http://localhost:8081/artifactory"
    publish {
        repository {
            repoKey = 'myapp-snapshots'
            username = "admin"
            password = "12345"
            maven = true
        }
        defaults {
            publications ('mavenJava')
        }
    }
}

publishing {
    publications {
        mavenJava(MavenPublication) {
            from components.java
        }
    }
}
当我在测试
build.gradle
项目中使用此代码段并运行
gradle artifactoryPublish
时,它会将我的JAR正确地发布到Artifactory

我的问题:如何将此片段添加到我的项目中,以便在成功时从父目录运行
gradle clean build
,生成发布到Artifactory的客户端和共享jar?


虽然不是很理想,但如果不可能一下子完成所有这些,我愿意将出版作为一个单独的第二步。有什么想法吗?

使用
artifactory
插件是正确的方法。 您需要将其应用于
allprojects
,并使用
artifactoryPublish.skip=true
禁用顶级项目上的部署。 您可以找到一个与您的项目非常相似的完整工作示例

默认情况下,
build
不依赖于
artifactoryPublish
,因此您需要运行
gradle build artifactoryPublish
来上载JAR。原因是,在决定上载某些内容之前,您可能需要运行大量构建。通过将
build
配置为依赖于
artifactoryPublish
,可以建立依赖关系:

build(dependsOn: 'artifactoryPublish')

@阿迪尔:我认为朱巴鲁奇是在引用。这是4.x版本。当单个项目中的相同代码正常工作时,为什么多个项目会跳过jar发布?我不明白为什么要跳过它。我遇到的是,第一个Artifactory插件是在根目录上配置的,只有在根目录下才是gradle配置的子项目,因此它们的属性,如
group
version
对Artifactory配置不可见。解决这个问题的正确方法是什么?[JFrog example][1]使用
gradle.properties
中的版本和根项目中设置的组名,我不希望这样做。[1] :属性是一条路要走。