Gradle 4.8+ ломает публикацию плюща с пользовательскими настройками - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть файл Gradle, который работает в какой-то древней версии Gradle, но я хочу перейти на Gradle 5.0.К сожалению, он использует плющ, а не мавен, чтобы публиковать свои банки.Я сократил его до простого теста.

Я не уверен, что я что-то упустил или это ошибка или что-то еще.Я прикрепил подножку ниже.Я запускаю его

./gradlew wrapper && ./gradlew publish --info && cat build/publications/ivy/ivy.xml
  • Работает как и ожидалось с 4.7.Он публикует основной jar и исходный jar и добавляет зависимости.
  • Если я переключаюсь на 4.8, он ломается, он публикует только исходный jar, основной jar и зависимости отсутствуют.
  • Если япереключитесь на 4.8 и закомментируйте бит конфигурации, он снова публикует основной jar и зависимости.

Возможно, есть новый способ сделать что-то, но в таком случае я не смог найти, где это задокументировано.Вот источник build.gradle.

plugins {
  id 'java'
  id 'ivy-publish'
}   

sourceSets {
  testSupport {
    java {
      compileClasspath += main.output
      runtimeClasspath += main.output
    }
  }
  test {
    java {
      compileClasspath += testSupport.output
      runtimeClasspath += testSupport.output
    }
  }
}

dependencies {
  compile group: 'com.ibm.icu', name: 'icu4j', version: '58.2'
  compile group: 'org.apache.httpcomponents', name: 'httpclient', version: '4.5.3'
  compile group: 'io.swagger', name: 'swagger-parser', version: '1.0.32'
}

task sourceJar(type: Jar) {
  from sourceSets.main.allJava
}

task testSupportJar(type: Jar) {
  from sourceSets.testSupport.output
  appendix "test-support"
}

task testSupportSourceJar(type: Jar) {
  from sourceSets.testSupport.java.srcDirs
  appendix "test-support-sources"
}
artifacts {
  archives sourceJar
  archives testSupportJar
  archives testSupportSourceJar
}
publishing {
  repositories {
    ivy {
      name = 'myRepo'
      url = "file://${buildDir}/repo"
      layout "pattern", {
        artifact "[organisation]/[module]/[revision]/jars/[artifact].[ext]"
        ivy "[organisation]/[module]/[revision]/ivys/ivy-[revision].xml"
      }
    }
  }
  publications {
    ivy(IvyPublication) {
      organisation = 'com.example.com'
      // If you comment out the configurations below it will generate sensible ivy.xml
      configurations {
        "compile" {}
        "runtime" {}
      } 


      from components.java
      artifact(sourceJar) {
        type "source"
        extension "src.jar"
        conf "runtime"
      }
    }
  }
}

wrapper {
  // 4.7 works but 4.8+ doesn't.
  gradleVersion = '4.7'
}

1 Ответ

0 голосов
/ 04 декабря 2018

О человек, я только что понял это.Это относительный порядок from components.java и configurations элементов битов.Если configurations первый, то он, кажется, имеет приоритет над from components.java, а последний, похоже, игнорируется.Если вы поставите from components.java перед configurations, это сработает, и вам больше не придется вручную объявлять конфигурации, которые он генерирует по умолчанию.

FFS gradle.

...