2014-11-20 113 views
13

artifactory的这里是我的build.gradle出版两个罐子和来源罐子从摇篮

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

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

version="0.0.2" 
group = "mylib" 

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

dependencies { 
    compile 'commons-validator:commons-validator:1.4.0' 
    testCompile 'junit:junit:4.11' 
} 

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

publishing { 
    publications { 
     mavenJava(MavenPublication) { 
      from components.java 
     } 
    } 
} 

task sourcesJar(type: Jar, dependsOn: classes) { 
    classifier = 'sources' 
    from sourceSets.main.allSource 
} 

artifacts { 
    archives sourcesJar 
} 

task dist(type: Zip, dependsOn: build) { 
    classifier = 'buildreport' 

    from('build/test-results') { 
     include '*.xml' 
     into 'tests' 
    } 

    from('build/reports/codenarc') { 
     into 'reports' 
    } 

    from('build/docs') { 
     into 'api' 
    } 

    from(sourcesJar) { 
     into 'source' 
    } 

    from('build/libs') { 
     exclude '*-sources.jar' 
     into 'bin' 
    } 
} 

在此基础上的当前设置:

  • 要建立我的JAR我要运行gradle clean build groovydoc sourcesJar dist然后
  • 要发布到Artifactory,我必须运行第二个命令gradle artifactoryPublish

两件事情我期待在这里改变:

  1. gradle artifactoryPublish只出版我的建JAR和动态创建的POM来artifactory的。我希望它也发布我的版本创建的源JAR。 如何?;和
  2. 理想情况下,我希望能够通过调用gradle publish来完成上述所有操作,而不是必须按顺序运行2个命令。 这可能吗?如果是这样,怎么样?
+0

请参阅我的答案,请让我知道它是否工作。 – Opal 2015-05-30 08:29:27

回答

15

当涉及到你需要修改你的脚本以下列方式出版来源:

publishing { 
    publications { 
     mavenJava(MavenPublication) { 
      from components.java 
      artifact (sourcesJar) { 
       classifier = 'sources' 
      } 
     } 
    } 
} 

当涉及到一个单一的命令,你需要做的是任务之间的定义依赖。不幸的是,我不能尝试脚本,所以它可能是多余的,但应该做的工作:

artifactoryPublish.dependsOn('clean', 'build', 'groovydoc', 'sourcesJar', 'dist') 
publish.dependsOn(artifactoryPublish) 
+0

由于某种奇怪的原因,将'clean'作为依赖项添加到'artifactoryPublish'中导致一切都被构建,然后清理,然后尝试发布......这显然失败了,因为现在没有什么可以发布的了。我怎样才能强制'干净'在一切之前发生? – agent154 2015-05-30 18:31:33

+0

一个解决方案(尽管我不知道它是否是最好的)将使用以下代码:'compileJava.dependsOn('clean')' – agent154 2015-05-30 18:34:18

+0

'artifactoryPublish'可能在内部定义了依赖关系。明天会检查它。 – Opal 2015-05-30 20:35:14