gpt4 book ai didi

java - 将 sourcesJar 任务添加到自定义 Gradle 插件

转载 作者:搜寻专家 更新时间:2023-10-31 20:09:32 26 4
gpt4 key购买 nike

我的公司最近为 vanilla 配置(存储库、跨项目的公共(public)依赖项等)编写了 gradle 插件。总的来说,这大大简化了我们的构建过程,并发现了项目之间的一些不一致之处。我们最近尝试向插件添加一个 sourcesJar 任务,但没有成功。

这是损坏的插件:

package com.mycompany.plugins

import org.gradle.api.Project
import org.gradle.api.Plugin
import org.gradle.api.tasks.bundling.Jar

class OurJavaPlugin implements Plugin<Project> {

void apply(Project project) {

def date = com.mycompany.util.UtilityFunctions.getDate()

project.configure(project) {
println('Applying Java properties to: ' + project.name)

apply plugin: 'java'
apply plugin: 'maven'
apply plugin: 'idea'
apply plugin: 'eclipse'

version = date

// Use the local repos
repositories {
maven {
url "$externalDependenciesRepo"
}
maven {
url "$internalDependenciesRepo"
}
}

uploadArchives {
repositories {
mavenDeployer {
// Deploy to internal repo
repository(url: "$internalDependenciesRepo")
}
}
}

// Common dependencies
dependencies {
compile group: 'log4j', name: 'log4j', version:'1.2.17'
compile group: 'org.slf4j', name: 'slf4j-log4j12', version:'1.6.6'
compile group: 'org.slf4j', name: 'slf4j-api', version:'1.6.6'
testCompile "junit:junit:$junit_version"
}

eclipse.project {
natures 'org.springsource.ide.eclipse.gradle.core.nature'
}

task sourcesJar(type: Jar, dependsOn: classes) {
classifier = 'sources'
from sourceSets.main.allSource
}

artifacts {
archives sourcesJar
}
}
}
}

这个插件很好用,除了 sourcesJar。当我将其添加到组合中(并编译/部署到我们的本地存储库)时,我在尝试构建使用该插件的项目时遇到此错误:

$ gradle :myProject:clean -x Test
Applying Java properties to: myProject

FAILURE: Build failed with an exception.

* Where:
Build file 'C:\Users\me\Documents\code\root\myProject\build.gradle' line: 1

* What went wrong:
A problem occurred evaluating project ':myProject'.
> Failed to apply plugin [id 'customjava']
> Could not find method sourcesJar() for arguments [{type=class org.gradle.api.tasks.bundling.Jar, dependsOn=task ':analytics-isr:classes'}, com.mycompany.plugins.OurJavaPlugin $_apply_closure1$_closure6@4c1d59cd] on project ':myProject'.

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

BUILD FAILED

Total time: 3.352 secs

最佳答案

当您在 build.gradle 脚本中定义任务时,会调用一个(共 4 个)task 方法 - 您可以看到第一个 here .正如您还可以看到的,这些方法都不匹配 DSL - 您在 build.gradle 中定义了一个任务。为什么?因为在执行之前,每个 build.gradle 都会被评估以 DSL 转换为适当的方法调用。有关详细信息,请查看 this问题。

提到的机制在自定义插件中不起作用 - 此处代码被解释按原样而不是翻译它。如你所见here Project 类上没有定义 sourcesJar 方法。要在插件中创建任务,您需要调用上述 task 方法,例如:

task('sourcesJar', type: Jar, dependsOn: classes) {
classifier = 'sources'
from sourceSets.main.allSource
}

它恰好调用了 this方法(我知道参数顺序不同,但这就是 groovy 的工作方式 - 相信我)。

此外,您不需要 project.configure(project) {...}project.with {...} 就足够了。

关于java - 将 sourcesJar 任务添加到自定义 Gradle 插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37870567/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com