我有以下内容,并认为它是'添加'到我的源集,但实际上只是修改了它…
sourceSets {
test {
resources {
srcDirs = ["src/main/java"]
includes = ["**/*.html"]
}
}
}
我真正想要的是src/test/资源/**和上面的内容。不过,我不想从src/test/资源中排除任何文件,上面只包括我放在那里的任何目录中的html。
谢了迪恩
下面将说明使用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
。这个答案是通过SourceDirectorySet的Gradle文档发现的。有趣的是,对于3.0,它包含一个待办事项:
待办事项-配置包含/排除单个源目录
这意味着这种解决方法(通过这种方法)可能是必要的。
我明白你的意思了。我试过了,它起作用了。请仔细看看:
sourceSets {
test {
resources {
srcDirs = ["src/main/java"]
includes = ["**/*.html"]
}
}
}
sourceSets.test.resources.srcDir 'src/test/resources'
将这些添加到build. gradle中。
我在想是否要发布这个答案。因此,如果您对之前的答案不满意,请尝试以下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
}
}
}