2014-09-18 113 views
1

我有一个奇怪的场景,其中Gradle好像试图编译位于我设置为依赖关系的jar文件内的“.java”文件。我做这样的事情:Gradle在jar文件中编译.java?

dependencies { 
    testCompile fileTree(dir: './libs', include: ['*JarResources/Java/*.jar']) 
    testCompile group: 'junit', name: 'junit', version: '4.11' 
} 

...我有一个相当大的jar依赖列表。当我尝试运行我的测试时,它在编译阶段失败,它无法找到堆放在jar文件中的Java文件的符号。这些jar依赖关系中的一部分打包时,其源代码将放在相应的.class旁边。我尝试使用包含过滤器在我的源设置无济于事。

sourceSets { 
    main { 
     java { 
      exclude 'com/mypkg/other/**' 
     } 
    } 
    test { 
     java { 
      include 'com/mypkg/test/**' 
     } 
    } 
} 

我可以使用它的gradle这个意识,恕不问题(我在这里右击单元测试和运行它们),因为它是足够聪明,构建依赖类路径,而没有经过运行的IntelliJ 13测试文件到Javac,但不知何故相同的build.gradle从命令行失败。这是一个已知的问题,Gradle会自动将依赖关系传递给javac,因为它在Jar文件中发现它们?

回答

2

您所看到的是Java编译器的默认行为(源路径默认为类路径,源路径上的文件被编译)。一条出路是明确设置源路径设置为“无”:

tasks.withType(JavaCompile) { 
    options.compilerArgs += ["-sourcepath", "''"] 
} 

PS:不是所有的工具/集成开发环境可以应对罐的来源,所以它通常是更好地把它们放在一个单独的源罐。

+0

谢谢!你用这个提示保存了我的培根!不幸的是我没有能力改变依赖关系的结构。这是那些“当我得到它时就是这样”情景。有一段时间我不会找到我的出路! – Cliff 2014-09-19 00:45:02