我有一个包含多个模块的项目,其中包含不同文件夹中的源代码。我想将这些独立模块的构建作为gradle构建脚本的任务。
/.
/abc/MyTest.java
/lib/<empty>
/build.gradle
的build.gradle:
apply plugin: "java"
dependencies { compile "javax.jms:jms:1.1" }
defaultTasks 'compileIt'
task compileIt (type: JavaCompile) {
source = files("abc/MyTest.java")
classpath = files("lib")
destinationDir = file('classes')
}
MyTest.java:
package abc;
public class MyTest {
public static void main(String[] argv) throws javax.jms.JMSException {
throw new javax.jms.JMSException("JMS test!");
}
}
运行gradle我收到以下错误:
C:\Develop\Java\....\MyTest.java:3: error:
package javax.jms does not exist
public static void main(String[] argv) throws javax.jms.JMSException
似乎没有使用依赖项。
推杆&#34;&lt;&lt;&#34;进入任务
task compileIt (type: JavaCompile) << {
我得到了:
C:\Develop\Java\.....>gradle
:compileIt UP-TO-DATE
BUILD SUCCESSFUL
Total time: 4.296 secs
但到目前为止还没有做任何事......
问题出在哪里?非常感谢你!
答案 0 :(得分:2)
解决方案是删除java插件的用法并添加compile:
的配置configurations {
compile
}
然后像这样设置classpath
:
classpath = configurations.compile
为sourceCompatibility
目标设置targetCompatibility
,dependencyCacheDir
和compileIt
,它可以正常运行。
编辑-------------------------
正如@Peter Niederwieser所讨论的,更好的方法是自定义java
插件:
更改默认构建的配置:
sourceSets {
main {
java {
srcDirs = ['abc']
}
}
...
}
另外你可以改变构建目录:
compileJava {
destinationDir = file(project.get("build.binaries.dir"))
}
为第二次构建添加新任务
sourceSets {
...
compileTwo {
java {
srcDirs = ['abc2']
}
}
}
...
task compileTwo(type: JavaCompile) {
source = sourceSets.compileTwo.allSource.srcDirs
destinationDir = file('classes')
classpath = configurations.compile
}