2014-11-20 3 views
13

Вот мой build.gradle:Publishing как банки и источники баночка для Artifactory от 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

ответ

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

+0

Решение (хотя я не знаю, является ли оно лучшим) было бы использовать следующее: 'compileJava.dependsOn ('clean')' – agent154

+0

'artifactoryPublish' может иметь зависимости, определенные внутри. Будет проверять это завтра. – Opal

Смежные вопросы