wjo*_*son 6 java groovy gradle
我在groovy中实现了一个自定义任务.如果我为它在groovy(X.groovy)中实现它提供了一个实用程序类并将它放在buildsrc中,那么任务就可以了.如果我在Java(Y.java)中实现等效类并将其放在同一目录中,则任务失败并显示以下错误消息:
:buildsrc:compileGroovystartup failed:
General error during conversion: Could not load class 'com.myinc.gradle.api.data.Y'
from file:/project/buildsrc/build/classes/main/com/myinc/gradle/api/data/Y.class.
Run Code Online (Sandbox Code Playgroud)
Y.class文件存在于错误消息中指定的位置.当Y.java位于任何常用位置时,构建失败:
buildsrc/src/main/groovy/.../Y.java<br>
buildsrc/src/main/java/.../Y.java
Run Code Online (Sandbox Code Playgroud)
Gradle文档说"您可以将构建源代码放在此目录中并坚持Java/Groovy项目的布局约定",并将应用其默认的buildsrc构建脚本.
来源:http://www.gradle.org/docs/current/userguide/organizing_build_logic.html#sec : build_sources
Project Layout允许Groovy源目录包含Groovy和Java代码.
资料来源:http://www.gradle.org/docs/current/userguide/groovy_plugin.html#sec : groovyCompile
复制:
项目/的build.gradle:
task t (type: sample.MyTask) {
println "configuring task"
}
Run Code Online (Sandbox Code Playgroud)
项目/ buildsrc/src目录/主/常规/样本
MyTask.groovy
package sample
import org.gradle.api.DefaultTask
import org.gradle.api.tasks.TaskAction
class MyTask extends DefaultTask {
@TaskAction
public void task() {
println 'task action'
new X().m()
// new Y().m() // uncommenting this line should generate an error when you build 't'
}
}
Run Code Online (Sandbox Code Playgroud)
X.groovy
package sample;
class X {
void m() {
println "x.m"
}
}
Run Code Online (Sandbox Code Playgroud)
Y.java
package sample;
public class Y {
void m() {
System.out.println("y.m");
}
}
Run Code Online (Sandbox Code Playgroud)
OSX 10.8.4,IntelliJ 12.1,Gradle 1.8
只是一个想法:也许它与包声明有关。Java 在这里比 groovy 更挑剔,并且期望源文件位于相应的目录中。我无法重现你的问题。您能否提供一个小型独立项目来演示您的问题?
\n\n干杯,\nRen\xc3\xa9
\n| 归档时间: |
|
| 查看次数: |
1441 次 |
| 最近记录: |