当前位置: 首页 > 知识库问答 >
问题:

在不使用maven的情况下应用本地jar-plugin

仲皓君
2023-03-14

我想从本地的jar加载我的自定义插件。jar文件编译良好,当我检查它时,清单和插件类就在那里。

gradlePlugin {
    plugins {
        create("asdf") { // <-- I really call it "asdf" in the kts script
            id = "asdf"
            implementationClass = "pluginTest.TestPlugin"
            version = "1.4.0"
        }
    }
}

这个插件还没有做任何有用的事情,因为它应该是一个概念验证,以确保它能够正常工作:

class TestPlugin : Plugin<Project> {
    override fun apply(project: Project) {
        println("Hallo TestPlugin!")
    }
}
buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath(files("..\\..\\path\\to\\pluginTest.jar"))
    }
}

plugins {
    id("asdf") version "1.4.0"
}

在以下任何源中都找不到插件[ID:“asdf”,版本:“1.4.0”]:

我错过了什么?我使用Gradlev6.5。

共有1个答案

宋飞文
2023-03-14

当您在类路径上有插件jar时,您就不能在插件应用程序中有版本号。我想这是因为首先在类路径上不能有多个不同版本的JAR,所以在这里指定一个版本没有任何意义(可能除了验证您使用的是正确的版本之外)。这不会解决问题,但这是一个开始。

老实说,我不知道为什么你的方法还是行不通。buildscript块应该为该特定脚本设置依赖项,这应该使插件对它可见。不是因为某种原因。

也许这是一个bug,也许这只是对plugin{}块使用的一个未记录的限制。也许你可以在Gradle论坛上询问一下,或者为它制造一个问题。但是,也有不涉及发布到(本地)Maven存储库的变通方法,我同意这可能有点烦人。

// build.gradle (Groovy DSL)
buildscript {
    dependencies {
        classpath(files("..\\..\\path\\to\\pluginTest.jar"))
    }
}

apply from: "asdf"

或者,将buildscript插件从build.gradle文件移动到settings.gradle文件。这使得对整个构建类路径可用,并将使其与插件块一起工作:

// settings.gradle (Groovy DSL):
buildscript {
    dependencies {
        classpath(files("..\\..\\path\\to\\pluginTest.jar"))
    }
}

// build.gradle (Groovy DSL)
plugins {
    id("asdf")
}

最后,以防万一您还没有考虑过它,您可以将插件添加为一个复合构建。这将创建一个对插件的源依赖关系,并且具有这样的优点:可传递依赖关系将被转移(您放在插件自己的依赖关系块中的那些依赖关系),并且如果不是最新的,它将被自动构建。我使用这种方法来集成测试我的插件,有时也会将它们应用到我的其他实际项目中,在发布新版本之前在更大的环境中测试它们。

使用以下任一项执行此操作:

// settings.gradle (Groovy DSL):
includeBuild("..\\..\\path\\to\\plugin")

// build.gradle (Groovy DSL):
plugins {
    id("asdf")
}

或者不在构建中对其进行硬编码(这样您就可以在本地版本和发布版本之间动态切换):

// build.gradle (Groovy DSL):
plugins {
    id("asdf") version "1.4.0" // Version is optional (will be ignored when the command line switch below)
}

// Run with:
./gradlew --include-build "..\\..\\path\\to\\plugin" build
 类似资料:
  • 问题内容: 我已经使用flask-oauthlib实现了一个oauth2服务器和一个oauth2客户端。 当我尝试在本地测试时,客户端返回InsecureTransportError并告诉我应该使用https。 有没有办法在没有https的情况下在本地测试应用程序? 客户端运行在127.0.0.2:5000,服务器运行在127.0.0.1:5000。 问题答案: 你应注意,Oauth2通过SSL层

  • 我想使用Cognito对我的用户进行身份验证,这是一个内置于Flutter和Dart的应用程序。 不幸的是,Dart不存在本机AWS SDK,我不能在颤振中使用JS互操作。 我已经研究了OAuth2流,但这需要将我的用户重定向到登录表单,这对移动应用程序来说不是很好。 有哪些替代方案?

  • 在我的身材中。格雷德,我有一个来自组织的任务。sonarqube插件。每当我运行gradle sonarqube时,都会出现以下错误: 我在我的组织中没有SonarQube服务器的管理员权限,请让我知道如何在本地运行SonarQube analysys(预览分析),而不将结果推送到服务器 (我知道IntelliJ有一个SonarLint插件,可以在IDE中分析代码,但安装它的过程需要一个漫长的审批

  • 问题内容: 我从Vaadin开始,我想知道在不使用maven的情况下在NetBeans中使用此框架是否可行。原因是使用maven的项目需要很长时间才能下载依赖项,并且由于超时连接问题而无法运行。 我已经下载了“多合一”文件,并尝试按照这些README.txt文件的说明进行操作: 将除vaadin-client和vaadin-client-compiler以外的所有vaadin- *文件复制到项目中

  • 问题内容: 我想知道是否可以在没有支持库的情况下使用FragmentStatePagerAdapter类或其等效类? 我知道如何使用本机片段代替支持库中的本机片段,许多其他类也具有类似的等效项,但是我找不到代替该类的内容。 我基本上想扩展它以便在我的适配器中使用,就像这样 问题答案: 我想您已经阅读了 docs,但以防万一: 该课程目前正在早期设计和开发中。该API可能会在以后的兼容性库更新中更改

  • 问题内容: 我想实现一个可以使用flask-script停止flask应用程序的命令。我已经搜索了一段时间。因为该框架不提供“ app.stop()” API,所以我对如何编写此代码感到好奇。我正在使用Ubuntu 12.10和Python 2.7.3。 问题答案: 如果仅在桌面上运行服务器,则可以公开终结点以终止服务器: 这是另一种包含更多的方法: 让我知道是否有帮助。