提问者:小点点

如何在gradle的测试源代码集中包含所有src/test/资源/**和src/main/java/**/*. html?


我有以下内容,并认为它是'添加'到我的源集,但实际上只是修改了它…

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

我真正想要的是src/test/资源/**和上面的内容。不过,我不想从src/test/资源中排除任何文件,上面只包括我放在那里的任何目录中的html。

谢了迪恩


共3个答案

匿名用户

下面将说明使用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
    }
  }
}

相关问题