Java Gradle自定义版本
我有一个包含多个模块的项目,其源代码位于不同的文件夹中。我想把这些独立模块的构建作为gradle构建脚本的任务Java Gradle自定义版本,java,gradle,Java,Gradle,我有一个包含多个模块的项目,其源代码位于不同的文件夹中。我想把这些独立模块的构建作为gradle构建脚本的任务 /. /abc/MyTest.java /lib/<empty> /build.gradle MyTest.java: package abc; public class MyTest { public static void main(String[] argv) throws javax.jms.JMSException {
/.
/abc/MyTest.java
/lib/<empty>
/build.gradle
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
看起来依赖项并没有被使用
放置“解决方案是删除java插件的使用并添加编译配置:
configurations {
compile
}
然后像这样设置类路径
:
classpath = configurations.compile
为compileIt
taks设置sourceCompatibility
、targetCompatibility
和dependencyCacheDir
,其工作正常
编辑-------------------------
正如@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
}
classpath
属性的配置错误。为什么不使用java
插件添加的JavaCompile
任务?如果有多个源代码树,可以声明多个源代码集,也可以使用多项目生成。有关详细信息,请查看gradle all
下载中的和示例关于这些概念的信息。@Peter,我正在进行从非常复杂的Ant脚本的迁移,我无法更改项目的结构,这就是为什么我需要为独立构建创建更多任务的原因。类路径的正确设置是什么来从定义中获取依赖项?谢谢!您不需要更改如果您只需要声明编译依赖项,请使用classpath=configurations.compile
。但是有一种可能比声明自己的JavaCompile
任务更好的方法。如果您不使用诸如源代码集之类的抽象,其他插件将无法“理解”您的构建,并且您可能无法理解(轻松地)使用它们。换句话说,您通常不希望最终得到与遗留Ant构建处于相同(低)抽象级别的渐变构建。是的,您是对的,这只是“变通方法”“我一直在寻找答案。但我会尝试找到一种更优雅的方法来解决它。然后我会把它放在答案中。谢谢!你可以接受你自己的答案——它肯定对我有帮助。”
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
}