2016-07-15 35 views
4

我有以下的,认为这是“加入”我的sourceSet但实际上只是修改了它..如何在gradle中的测试源代码集中包含所有src/test/resources/**和src/main/java/**/*。html?

sourceSets { 
    test { 
     resources { 
      srcDirs = ["src/main/java"] 
      includes = ["**/*.html"] 
     } 
    } 
} 

我真正想要的是两者的src /测试/资源/ **及以上为好。我不想从src/test/resources中排除任何文件,上面只包含了我放在那里的任何目录中的html。

感谢, 迪安

+0

尝试+ =操盘纯= – Jk1

+0

@ JK1我不知道我undertsand 。 srcDirs + = [“src/main/java”] ...好的,但是当我做include = [“**/*。html”],它会开始排除我想要使用的src/test /对?我也不想包含+ = [“**/*。html”],因为这意味着**/* + **/*。html,但这似乎并不有用,但我呢? –

+0

@ Jk1也许你可以用一个例子来说明一下吗? –

回答

2

下面将说明使用main的技术(因此它可以验证):通过命令线的概念的

apply plugin: 'java' 

sourceSets { 
    myExtra { 
     resources { 
      srcDirs "src/main/java" 
      includes = ["**/*.html"] 
     } 
    } 
    main { 
     resources { 
      source myExtra.resources 
     } 
    } 
} 

证明:

bash$ ls src/main/java 
abc.html 
xyz.txt 

bash$ ls src/main/resources/ 
def.html 
ijk.txt 

bash$ gradle clean jar 
bash$ jar tf build/libs/myexample.jar 
META-INF/ 
META-INF/MANIFEST.MF 
abc.html 
def.html 
ijk.txt 

就你而言,请将main更改为test。这个答案是通过Gradle doc for SourceDirectorySet发现的。有趣的是,为3.0,它包含一个TODO:

TODO - 配置包括/不包括单个源显示目录

这意味着这个变通(经由this method)可能是必要的。

+0

谢谢,作品很棒!!!! –

+0

grrrrrr,shucks @Michael Easter,它看起来很好,但打破了./gradlew eclipse命令的重复src/main/resources条目。它几乎奏效。 gradle插件仍然有效,但gradle插件被破坏,因为它没有移植-parameters设置来确保params被编译到类文件中....只是我的运气:(。答案适用于纯gradle,尽管在至少其他任何人,要小心,因为它可能会打破你的其他东西,直到gradlew eclipse被修复。 –

1

我明白了你的观点。我试过这个,它工作。请看看它:

sourceSets { 
    test { 
     resources { 
      srcDirs = ["src/main/java"] 
      includes = ["**/*.html"] 
     } 
    } 
} 

sourceSets.test.resources.srcDir 'src/test/resources' 

将这些添加到build.gradle中。

+0

这是行不通的 –

+0

@VyacheslavShvets你得到的错误是什么? –

+0

我回来了这个解决方案不工作,因为它结束只包含src/test/resources中的* .html文件,我想要src/test/resources/****和src/main/java/**/*。html,但是这个解决方案并没有这样做。 –

0

我在想是否发布这个答案。所以,如果你不满意以前的答案,请尝试以下哈克的方式(可能它会与eclipse命令工作):的

apply plugin: 'java' 

ConfigurableFileTree.metaClass.getAsSource = { 
    def fileTrees = delegate.asFileTrees 
    fileTrees.metaClass.getSrcDirTrees = { 
    return delegate as Set 
    } 
    fileTrees as SourceDirectorySet 
} 

sourceSets { 
    main { 
    resources { 
     srcDirs = [] // cleanup first 
     source fileTree('src/main/java').include('**/*.html').asSource 
     source fileTree('src/main/resources').asSource 
    } 
    } 
} 
相关问题