2016-04-30 92 views
1

我正在创建一个JDiff插件。因为它本质上是一个的Javadoc任务,我在下面https://docs.gradle.org/current/dsl/org.gradle.api.tasks.javadoc.Javadoc.html#org.gradle.api.tasks.javadoc.Javadoc:classpath如何让Gradle插件为插件jar设置依赖关系?

dependencies { 
    jDiffDoclet files('${PLUGIN_JAR_PATH}') 
} 

但我想这个插件做代表用户的这项工作。

到目前为止,该插件的apply方法有:

project.configurations { 
    jDiffDoclet 
} 

final xmlNewerTask = getJDiffTask(project).doFirst { 
    options.with { 
     docletpath = project.configurations.jDiffDoclet.files.asType(List) 
     doclet = 'jdiff.JDiff' 
    } 
} 

不知何故,该插件需要引用自己的罐子。或者,最后,真正需要的是能够设置docletpath,但仍然需要引用插件自己的jar。

+0

在你的插件'适用()'方法不可能这样做'project.getConfigurations.create()'和'configuration.getDependencies.add'? – RaGe

+0

究竟是什么被传递到'add'?它如何引用它自己的jar文件? –

+0

@RaGe,我为这个问题添加了更多信息。 –

回答

1

如果插件正确添加到一个项目,它正确解析,您可以用得到gradle这个高速缓存的罐子位置的路径:

project.buildscript.configurations.classpath.find{it.name == 'foo-plugin-name-1.0.0-SNAPSHOT.jar' } 
+0

插件必须知道jar的名称,包括它的版本。有没有通过'DefaultPluginManager'获得这些信息的方法? –

+0

哦,OTOH,而不是测试'name'上的精确匹配,它可能只是测试'startsWith'(尽管这可能会得到太多的命中)。 –

+1

我以为这是在你自己的插件里面,所以你应该知道这个名字?你可以用'contains'来代替完全匹配。 – RaGe