dr *_*rry 5 java resources gradle
我有一个多项目 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
Run Code Online (Sandbox Code Playgroud)
当我尝试执行 src/test/resources (init.sql) 下的内容时
commandLine 'psql', '-h', 'localhost', '-d', 'junit', '--username', 'junit', '-f' , sourceSets['test'].output.resourcesDir.toString() + '/create-data.sql'
Run Code Online (Sandbox Code Playgroud)
它失败,因为资源在构建目录中不可用:
/Users/me/dev/springweb/services/build/resources/test/create-data.sql: No such file or directory
Run Code Online (Sandbox Code Playgroud)
在我的根 build.gradle 下:
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()
}
}
Run Code Online (Sandbox Code Playgroud)
和“服务”build.gradle:
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 */
Run Code Online (Sandbox Code Playgroud)
我用 gradle build 执行它:
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
Run Code Online (Sandbox Code Playgroud)
从输出中我了解到源集符合我的预期,但测试资源没有被复制。怎么了?
测试资源的复制是由 Java 插件中的 processTestResources 任务完成的。Java 插件还将其指定为测试任务的先决条件,以便它在测试运行之前发生。
您已经告诉 gradle 您的 fillDb 任务也是测试任务的先决条件,但您没有告诉它 processTestResources 是您的 createDb 任务的先决条件。
所以你可以做类似的事情
task createDb (type:Exec, dependsOn: 'processTestResources') {
...
Run Code Online (Sandbox Code Playgroud)
顺便说一句,测试资源是通过类路径可供测试使用的资源。我假设您的测试实际上不需要在运行时在类路径上提供可用的 sql,那么它们是否需要在那里?
| 归档时间: |
|
| 查看次数: |
16424 次 |
| 最近记录: |