Создайте теневую банку с помощью функции Gradle в проекте Java - PullRequest
0 голосов
/ 31 мая 2019

Я пытаюсь использовать функцию плагина java (https://docs.gradle.org/5.3-rc-1/userguide/feature_variants.html), чтобы объявить 2 версии одной и той же зависимости и создать в конце 2 баночки:

java {
    registerFeature('v1') {
        usingSourceSet(sourceSets.main)
    }

    registerFeature('v2') {
        usingSourceSet(sourceSets.main)
    }
}

dependencies {
    compileOnly project(':djobi-core')

    v1Implementation(group: 'org.elasticsearch', name: 'elasticsearch-spark-13_' + scalaVersion, version:'6.2.2') {
        exclude group: "org.scala-lang"
    }

    v2Implementation(group: 'org.elasticsearch', name: 'elasticsearch-spark-13_' + scalaVersion, version:'6.3.2') {
        exclude group: "org.scala-lang"
    }
}

ShadowJar {

}

Но он генерирует только 1, это хороший способ использовать такую ​​функцию feature?

1 Ответ

1 голос
/ 02 июня 2019

В задаче по умолчанию shadowJar используется конфигурация runtime, см. документы -

Чтобы скрыть конфигурации v1 и v2, мы можем определить две новые задачитипа ShadowJar (их необходимо настроить).

На самом деле v1 и v2 могут быть определены как "нормальные" конфигурации, то есть избегая использования вариантов возможностей (этоПроще, более того, при попытке использовать shadowJar и v1Implementation выше, у нас есть ошибка (Resolving configuration 'v1Implementation' directly is not allowed).

См. отредактированный пример ниже, он может быть построен с помощью gradle shadowJar1 shadowJar2.


buildscript {
  repositories {
    maven {
      url "https://plugins.gradle.org/m2/"
    }
  }
  dependencies {
    classpath "com.github.jengelman.gradle.plugins:shadow:5.0.0"
  }
}

apply plugin: "com.github.johnrengelman.shadow"
apply plugin: 'java'

repositories {
  maven {
    url "https://plugins.gradle.org/m2/"
  }
  mavenCentral()
}

configurations {
  v1 {
    extendsFrom(implementation)
  }
  v2 {
    extendsFrom(implementation)
  }
}

dependencies {
    // tweaking deps here
    v1('ant:ant:1.6')
    v2('junit:junit:4.12')
}

task shadowJar1(type: com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar ) {
  classifier = 'v1'
  configurations=[project.configurations.v1]
}
task shadowJar2(type: com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar ) {
  classifier = 'v2'
  configurations=[project.configurations.v2]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...