使用来自flatDir来源的gradle插件

问题描述 投票:6回答:1

How to amend Gradle plugins {} management repository for custom plugins? 未重复在这篇文章中,因为它不涉及flatDir的使用。


问题

如何使用新的plugin {}语义而不是不推荐使用的apply()语义,使用本地JAR中定义的Gradle插件?

当前状态

[没有任何解决方案,在发布问题并进行了相当长的搜索后,我提交了 issue,想知道Gradle修订版插件中是否出于设计或监督目的不支持这种应为普通且直接的使用?语义。

很遗憾,我的报告已经关闭,没有提供有用的信息。

我要求在 new issue中进行澄清,但仍在等待中。

我很沮丧,因为期望社区至少对讨论这个问题感兴趣。

如果您可以提供信息,请这样做。

第一次更新

在澄清了用于配置插件源的新样式之后,我更新了settings.gradle文件以使用以下块打开。但是,我感到遗憾的是,仅凭此更改我看不到任何改善。 (对于build.gradle文件中引用的插件ID字段,我已经尝试了JAR元数据中发布的全局ID和JAR fie的基本名称。两者均同样失败。)

pluginManagement {
    repositories {
        gradlePluginPortal()
        jcenter()
        flatDir {
            dirs 'lib`'
        }
    }
}

该文档说明了如何使用自定义存储库,但似乎忽略了一个简单的平面目录的情况。

第二次更新

如果将版本号添加到JAR文件和plugins {}块中的相应语句,将会得到一些改进。在这种情况下,消息变为:

Plugin [id: 'plugin-id', version: '1.0.0'] was not found in any of the following sources:

- Gradle Core Plugins (plugin is not in 'org.gradle' namespace)
- Plugin Repositories (could not resolve plugin artifact 'plugin-id:plugin-id.gradle.plugin:1.0.0')
  Searched in the following repositories:
    Gradle Central Plugin Repository
    BintrayJCenter
    flatDir(/absolute/path/to/lib)

在这种情况下,目录被添加到搜索到的源列表中。

.gradle.plugin后缀被附加到打印的工件中我的ID上很奇怪。同样奇怪的是,将版本号添加到正在搜索的内容中会影响正在搜索的地点列表

所以我的项目仍然无法构建。感谢您提供进一步的帮助。

原始背景

我在项目的lib目录中放置了一个包含自定义插件定义的JAR文件。使用以下build.gradle构建文件,该构建成功运行。

buildscript {
  repositories {
      flatDir {
          dirs 'lib'
      }
  }
}

apply plugin: 'plugin-id'

但是,不赞成使用apply()语义,而赞成使用plugins {}块,因此我尝试如下更新构建文件。

plugins {
    id 'plugin-id'
}

repositories {
    flatDir {
        dirs 'lib'
    }
}

我知道plugins {}的内容可以从repositories {}定义中得出。

但是,更改会导致失败:

* What went wrong:
Plugin [id: 'plugin-id'] was not found in any of the following sources:

- Gradle Core Plugins (plugin is not in 'org.gradle' namespace)
- Plugin Repositories (plugin dependency must include a version number for this source)

保留plugin {}块,但将repositories {}块移回前导buildscript {}块不能解决该错误。也就是说,即使我恢复到早期版本,仅用apply()块替换plugin {}语句,该错误仍然存​​在。

最后,将repositories {}块添加到dependencies { classpath: ':jarname' }块没有任何效果,有些消息来源认为这是必要的,尽管我不知道为什么会这样。

java gradle plugins repository local
1个回答
0
投票

[不幸的是,我仍在尝试使用最新的plugins {} DSL来解决这个问题。但是,这是使用较旧的旧语法对我有用的方法:

buildscript {
    repositories {
        flatDir {
            dirs '/plugin-project-dir/build/libs'
        }
    }
    dependencies {
        // this is the name of the jar: my-plugin-0.0.1.jar
        // (note the lack of package name by the initial colon)
        classpath ":my-plugin:0.0.1"
    }
}

apply plugin: 'plugin-name-as-specified-by-META-INF/plugin.properties'

我希望其他人可以使用最新和最先进的语法和pluginManagement {}进一步详细说明解决此问题的方法。

© www.soinside.com 2019 - 2024. All rights reserved.