【问题标题】:Gradle, how to share a catalog via a settings pluginGradle,如何通过设置插件共享目录
【发布时间】:2021-05-11 11:04:43
【问题描述】:

尝试使用 Gradle 7 的新目录功能,我正在尝试通过设置插件共享目录

很遗憾,documentation 在这方面做得很短:

共享目录的一种选择是编写设置插件,将其发布到 Gradle 插件门户或内部存储库,然后让消费者将插件应用到他们的设置文件中。

我通过 gradle init 为插件开发人员使用 kotlin 作为语言和构建脚本进行了初始化。

然后我将Project 换成Settings 并在producer 上添加了一个虚拟别名

class UpgradedOctoGuacamolePlugin : Plugin<Settings> {
    override fun apply(settings: Settings) {
        settings.dependencyResolutionManagement {
            it.versionCatalogs {
                it.create("libs") {
                    it.alias("groovy-core").to("org.codehaus.groovy:groovy:3.0.5")
                }
            }
        }
    }
}

消费者方面settings.gradle.kts

dependencyResolutionManagement {
    repositories {
        mavenLocal()
        mavenCentral()
        maven("https://jitpack.io")
    }
    versionCatalogs {
        create("libs") {
            from("com.github.elect86:upgraded-octo-guacamole:9f454a68")
        }
    }
}

但在同步时

FAILURE: Build failed with an exception.

* What went wrong:
Could not resolve all artifacts for configuration 'incomingPlatformsForLibs'.
> Could not resolve com.github.elect86:upgraded-octo-guacamole:9f454a68.
  Required by:
      unspecified:unspecified:unspecified
   > No matching variant of com.github.elect86:upgraded-octo-guacamole:9f454a68 was found. The consumer was configured to find attribute 'org.gradle.internal.dm.model.builder.id' with value '0', attribute 'org.gradle.category' with value 'platform', attribute 'org.gradle.usage' with value 'version-catalog' but:
       - Variant 'apiElements' capability com.github.elect86:upgraded-octo-guacamole:9f454a68:
           - Incompatible because this component declares attribute 'org.gradle.category' with value 'library', attribute 'org.gradle.usage' with value 'java-api' and the consumer needed attribute 'org.gradle.category' with value 'platform', attribute 'org.gradle.usage' with value 'version-catalog'
           - Other compatible attribute:
               - Doesn't say anything about org.gradle.internal.dm.model.builder.id (required '0')
       - Variant 'runtimeElements' capability com.github.elect86:upgraded-octo-guacamole:9f454a68:
           - Incompatible because this component declares attribute 'org.gradle.category' with value 'library', attribute 'org.gradle.usage' with value 'java-runtime' and the consumer needed attribute 'org.gradle.category' with value 'platform', attribute 'org.gradle.usage' with value 'version-catalog'
           - Other compatible attribute:
               - Doesn't say anything about org.gradle.internal.dm.model.builder.id (required '0')

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 46ms

类别和用法不匹配,需要“平台”和“版本目录”,但只找到“库”和“java-api”

这些是我的生产者变体

19:15:03: Executing task 'outgoingVariants'...

Type-safe dependency accessors is an incubating feature.

> Task :outgoingVariants
--------------------------------------------------
Variant apiElements
--------------------------------------------------
Description = API elements for main.

Capabilities
    - com.github.elect86:upgraded-octo-guacamole:0.0.6 (default capability)
Attributes
    - org.gradle.category                 = library
    - org.gradle.dependency.bundling      = external
    - org.gradle.jvm.version              = 11
    - org.gradle.libraryelements          = jar
    - org.gradle.usage                    = java-api
    - org.jetbrains.kotlin.localToProject = public
    - org.jetbrains.kotlin.platform.type  = jvm

Artifacts
    - build/libs/upgraded-octo-guacamole-0.0.6.jar (artifactType = jar)

Secondary variants (*)
    - Variant : classes
       - Attributes
          - org.gradle.category                 = library
          - org.gradle.dependency.bundling      = external
          - org.gradle.jvm.version              = 11
          - org.gradle.libraryelements          = classes
          - org.gradle.usage                    = java-api
          - org.jetbrains.kotlin.localToProject = public
          - org.jetbrains.kotlin.platform.type  = jvm
       - Artifacts
          - build/classes/java/main (artifactType = java-classes-directory)
          - build/classes/kotlin/main (artifactType = java-classes-directory)
          - build/classes/kotlin/main (artifactType = java-classes-directory)

--------------------------------------------------
Variant runtimeElements
--------------------------------------------------
Description = Elements of runtime for main.

Capabilities
    - com.github.elect86:upgraded-octo-guacamole:0.0.6 (default capability)
Attributes
    - org.gradle.category                 = library
    - org.gradle.dependency.bundling      = external
    - org.gradle.jvm.version              = 11
    - org.gradle.libraryelements          = jar
    - org.gradle.usage                    = java-runtime
    - org.jetbrains.kotlin.localToProject = public
    - org.jetbrains.kotlin.platform.type  = jvm

Artifacts
    - build/libs/upgraded-octo-guacamole-0.0.6.jar (artifactType = jar)

Secondary variants (*)
    - Variant : classes
       - Attributes
          - org.gradle.category                 = library
          - org.gradle.dependency.bundling      = external
          - org.gradle.jvm.version              = 11
          - org.gradle.libraryelements          = classes
          - org.gradle.usage                    = java-runtime
          - org.jetbrains.kotlin.localToProject = public
          - org.jetbrains.kotlin.platform.type  = jvm
       - Artifacts
          - build/classes/java/main (artifactType = java-classes-directory)
          - build/classes/kotlin/main (artifactType = java-classes-directory)
    - Variant : resources
       - Attributes
          - org.gradle.category                 = library
          - org.gradle.dependency.bundling      = external
          - org.gradle.jvm.version              = 11
          - org.gradle.libraryelements          = resources
          - org.gradle.usage                    = java-runtime
          - org.jetbrains.kotlin.localToProject = public
          - org.jetbrains.kotlin.platform.type  = jvm
       - Artifacts
          - build/resources/main (artifactType = java-resources-directory)


(*) Secondary variants are variants created via the Configuration#getOutgoing(): ConfigurationPublications API which also participate in selection, in addition to the configuration itself.

BUILD SUCCESSFUL in 45ms
1 actionable task: 1 executed
19:15:04: Task execution finished 'outgoingVariants'.

我做错了什么?

我认为我不必自己修改这些属性..

规格:

distributionUrl=https\://services.gradle.org/distributions/gradle-7.0-milestone-1-all.zip

【问题讨论】:

    标签: gradle dependencies dependency-management


    【解决方案1】:

    原来我只需要在settings.gradle.kts 中应用插件,我不知道你能做到这一点

    apply {
       id("guacamole")
    }
    

    【讨论】:

    • 这是指导入项目的settings.gradle文件吗?我看到你的插件名字是upgraded-octo-guacamole,但是id是guacamole?
    • 是的,我修改了答案以更清楚地反映这一点
    • from("com.github.elect86:upgraded-octo-guacamole:9f454a68")的时候还需要加apply { id("guacamole") }吗?根据我的实验,当我拥有from 时,不再需要from,只要repository 指向图书馆所在的位置。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-26
    相关资源
    最近更新 更多