当前位置: 首页 > 知识库问答 >
问题:

Gradle不复制测试资源来构建

詹正浩
2023-03-14

我有一个多项目gradle项目(spring web),布局如下:

springweb
 |    build.gradle
 |    settings.gradle
 |_____ services
 |         build.gradle
 |         src/main/java
 |         src/main/resources
 |         src/test/java
 |         src/test/resources
 |             create-data.sql
 |_____ web
 |         build.gradle
 |         src/main/java
 |         src/main/resources
 |         src/main/webapp
 |         src/test/java
 |         src/test/resources

当我尝试执行src/test/resources(init.sql)下的内容时

commandLine 'psql', '-h', 'localhost', '-d', 'junit', '--username', 'junit', '-f' , sourceSets['test'].output.resourcesDir.toString() + '/create-data.sql'
/Users/me/dev/springweb/services/build/resources/test/create-data.sql: No such file or directory
ext {
    springSecurityGroup = 'org.springframework.security'
    springSecurityVersion = '3.1.4.RELEASE'
    springGroup = 'org.springframework'
    springVersion = '3.2.5.RELEASE'
    hibernateGroup = 'org.hibernate'
    hibernateVersion = '4.2.7.SP1'
}

subprojects {
    apply plugin: 'java'
    apply plugin: 'eclipse'
    sourceSets.all{
        println output.classesDir
    }

    repositories {
        mavenCentral()
    }
}
task createDb (type:Exec) { 
     println sourceSets['test'].output.resourcesDir.toString()
     commandLine 'psql', '-h', 'localhost', '-d', 'junit', '--username', 'junit', '-f' ,'/Users/me/dev/sip/sip/sip04/src/main/resources/create-table.sql'
}
task fillDb (type:Exec, dependsOn: 'createDb') {
     commandLine 'psql', '-h', 'localhost', '-d', 'junit', '--username', 'junit', '-f' , sourceSets['test'].output.resourcesDir.toString() + '/create-data.sql'
}
test.dependsOn fillDb

dependencies {
    /* zipped */
}

/* Change context path (base url). otherwise defaults to name of project */

我用gradle构建执行它:

gradle build
/Users/me/dev/springweb/services/build/classes/main
/Users/me/dev/springweb/services/build/classes/test
/Users/me/dev/springweb/web/build/classes/main
/Users/me/dev/springweb/web/build/classes/test
/Users/me/dev/springweb/services/build/resources/test
:services:compileJava UP-TO-DATE
:services:processResources UP-TO-DATE
:services:classes UP-TO-DATE
:services:jar UP-TO-DATE
:services:assemble UP-TO-DATE
:services:createDb
DROP TABLE
DROP SEQUENCE
zipped
:services:fillDb/Users/me/dev/springweb/services/build/resources/test/create-data.sql: No such file or directory

从输出中我了解到sourceSets和我预期的一样,但是测试资源没有被复制。怎么啦?

共有1个答案

赏弘
2023-03-14

测试资源的复制由Java插件中的processTestResources任务完成。Java插件还将此指定为测试任务的先决条件,以便在测试运行之前进行。

您已经告诉gradle您的fillDb任务也是test任务的先决条件,但您没有告诉它processTestResources是createDb任务的先决条件。

所以你可以做一些像

task createDb (type:Exec, dependsOn: 'processTestResources') { 
...

BTW测试资源是通过类路径使测试可用的东西。我假设您的测试实际上不需要在运行时在类路径上可用的sql,那么它们甚至需要在那里吗?

 类似资料:
  • 我的构建输出是out/production/classes。Java文件可以很好地编译成类,然后放在out/production/classes/packageName上,但资源不会被复制。据我所知,他们应该直接进入out/production/classes目录。 如果相关的话,我使用的是Java 11、Spring Boot和Gradle。这是我的构建。渐变 和我的编译器设置: 我的资源没有被

  • 我正在尝试创建一个Jar用作Maven存储库 我已经构建了所有内容,所有类都准备好了。唯一的问题是gradlew./build包含了测试文件夹中的类和资源。我不希望这些作为jar的一部分,尤其是正在测试的资源文件。 因此,我的问题是,如何从jar构建任务中排除这些文件。我试过了 在我的身体里。格拉德尔:但那没用 我是Gradle和Maven的新手,所以任何洞察力都会有帮助。谢谢! 参考材料 bui

  • 我的gradle模块有以下文件夹结构: 我的目标是建立一个ear存档,它只包含Tclient。war和META-INF。然而,gradle将所有资源文件复制到ear根目录。 Gradle留档关于耳朵插件说: Ear任务的默认行为是将src/main/application的内容复制到归档文件的根目录。如果应用程序目录不包含META-INF/application。然后会为您生成一个xml部署描述符

  • 我使用以下命令为调试生成启用了proguard: 当我这样做时,我遇到的问题是gradle构建也希望在proGuard dDebugTest任务期间推进测试。我似乎无法修改以访问此特定任务。有没有一种方法可以预先调试apk,而不是测试apk?

  • 当我在gradle中运行构建任务时,它将所有的Java资源(从src/main/resources)复制到build/resources中。因为我有太重的文件,所以我的构建过程比可能的要慢得多。 有什么方法可以禁止复制它们,并迫使Java仅仅从src/main/resources使用它们吗?

  • 问题内容: 我创建了自己的build.xml,其中包含: 效果很好。当我调用ant run时,它会编译并运行我的应用程序,但是我的应用程序带有图标包,并且不会移动到“ build”文件夹,因此我的应用程序以无法找到我的图标的异常结束。当我自己移动它们时,它将起作用。 我尝试使用 它可以工作,但是我想不使用copy命令。javac是否有任何参数?或者是其他东西? 谢谢你的答案。 问题答案: 抱歉,您