Gradle自定义构建

时间:2014-11-12 14:18:18

标签: java gradle

我有一个包含多个模块的项目,其中包含不同文件夹中的源代码。我想将这些独立模块的构建作为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

但到目前为止还没有做任何事......

问题出在哪里?非常感谢你!

1 个答案:

答案 0 :(得分:2)

解决方案是删除java插件的用法并添加compile:

的配置
configurations {
    compile
}

然后像这样设置classpath

classpath = configurations.compile

sourceCompatibility目标设置targetCompatibilitydependencyCacheDircompileIt,它可以正常运行。

编辑-------------------------

正如@Peter Niederwieser所讨论的,更好的方法是自定义java插件:

  1. 更改默认构建的配置:

    sourceSets {
      main {
        java {
          srcDirs = ['abc']
        }
      }
      ...
    }
    
  2. 另外你可以改变构建目录:

        compileJava {
            destinationDir = file(project.get("build.binaries.dir"))
        }
    
    1. 为第二次构建添加新任务

      sourceSets {
        ...
        compileTwo {
          java {
            srcDirs = ['abc2']
          }
        }
      }
      ...
      task compileTwo(type: JavaCompile) {
        source = sourceSets.compileTwo.allSource.srcDirs
        destinationDir = file('classes')    
        classpath = configurations.compile  
      }