我有以下内容,并认为它是'添加'到我的sourceSet但实际上只是修改了它..
sourceSets {
test {
resources {
srcDirs = ["src/main/java"]
includes = ["**/*.html"]
}
}
}
我真正想要的是src / test / resources / **以及上面的内容。我不想从src / test / resources中排除任何文件,但上面只包含我放在那里的任何目录中的html。
感谢, 迪安
答案 0 :(得分:4)
以下将说明使用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)可能是必要的。
答案 1 :(得分:2)
我明白了你的意思。我试过这个并且它有效。请看一下:
sourceSets {
test {
resources {
srcDirs = ["src/main/java"]
includes = ["**/*.html"]
}
}
}
sourceSets.test.resources.srcDir 'src/test/resources'
在build.gradle中添加这些内容。
答案 2 :(得分:0)
我在想是否发布这个答案。因此,如果您对上一个答案不满意,请尝试以下hacky方式(可能它适用于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
}
}
}
答案 3 :(得分:0)
并非完全是您的要求,但对于发现此问题的人可能会有所帮助:
我只想将测试资源放在源旁边。所以我只需要排除来源。 在您的情况下,也许您可以排除那些会介意进入JAR和/或类路径的对象。
没有其他答案对我有用,这确实有用:
sourceSets {
test {
resources {
srcDirs += "src/test/kotlin"
excludes = ["**/*.kt"]
}
}
}
6.3级。