Java 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 {

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