Java Gradle自定义插件取决于系统任务
我有一个名为Java Gradle自定义插件取决于系统任务,java,gradle,gradle-plugin,Java,Gradle,Gradle Plugin,我有一个名为MyPlugin的自定义插件,它包含一个名为MyTask的自定义任务。我想让MyTaskdependsOncompileJava。我试图给MyTask.dependsOn(compileJava),但它说名为“MyTask”的任务不存在。有什么办法吗 MyPlugin.java public class MyPlugin implements Plugin<Project> { public static final String TASK_NAME = "MyT
MyPlugin
的自定义插件,它包含一个名为MyTask
的自定义任务。我想让MyTask
dependsOncompileJava
。我试图给MyTask.dependsOn(compileJava)
,但它说名为“MyTask”的任务不存在。有什么办法吗
MyPlugin.java
public class MyPlugin implements Plugin<Project> {
public static final String TASK_NAME = "MyTask";
@Override
public void apply(Project project) {
project.getExtensions().create(TASK_NAME, MyExtension.class);
project.getTasks().create(TASK_NAME, MyTask.class);
}
}
public class MyTask extends DefaultTask {
private MyExtension extension;
@TaskAction
public void myTask() {
Project project = getProject();
extension = project.getExtensions().findByType(MyExtension.class);
PropertyManager propertyManager = new PropertyManager(project, extension);
propertyManager.setProperties();
System.out.println(extension.getValue());
}
public class MyExtension {
private String value;
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
MyExtension.java
public class MyPlugin implements Plugin<Project> {
public static final String TASK_NAME = "MyTask";
@Override
public void apply(Project project) {
project.getExtensions().create(TASK_NAME, MyExtension.class);
project.getTasks().create(TASK_NAME, MyTask.class);
}
}
public class MyTask extends DefaultTask {
private MyExtension extension;
@TaskAction
public void myTask() {
Project project = getProject();
extension = project.getExtensions().findByType(MyExtension.class);
PropertyManager propertyManager = new PropertyManager(project, extension);
propertyManager.setProperties();
System.out.println(extension.getValue());
}
public class MyExtension {
private String value;
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
build.gradle
apply plugin: 'maven'
apply plugin: 'groovy'
apply plugin: 'java'
apply plugin: 'com.jfrog.bintray'
sourceCompatibility = 1.8
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.11'
compile gradleApi()
}
repositories {
mavenCentral()
}
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.4'
}
}
task copyLibs(type: Copy) {
from configurations.runtime
into "$projectDir/libs"
}
MyTask.dependsOn(copyLibs) //not working
MyTask.dependsOn(compileJava) //not working
据我所知,您的任务名为myTask
,而不是myTask
。
这是作者代码中的一个输入错误
更新:
您没有应用插件,因此无法创建任务。您不能从插件的build.gradle
应用插件。至少您不能应用正在生成的插件的版本。您所能做的最好的事情就是应用存储在Maven repo中的先前构建的插件版本。但是这看起来不是个好主意。如果你的gradle插件被应用到不同的gradle项目,比如projectA,你的插件会在projectA中添加一个名为MyTask的任务。您上面发布的build.gradle用于插件项目,没有名为MyTask的任务。您必须使用
tasks.MyTask.dependsOn(copyLibs)
tasks.MyTask.dependsOn(compileJava)
因为您定义的任务对象与copyLibs不在当前范围内。但您可以通过任务参考(请参阅:)访问它。No。那实际上是个打字错误。我在MyTask中的任务名称你打算在你的问题中修复它吗?我已经做了更改,并在答案中添加了一个假设。这是插件项目的build.gradle。你能添加build.gradle
文件在其中应用插件并配置任务吗?