2014-11-20 64 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