在运行时在 gradle 中使用黄瓜时添加必要的库文件



我们在开发过程中使用 Cucumber 在 AWS 中构建服务。我们使用 DynamoDb,在本地运行测试时,我们使用 DynamoDB 的本地实例。为此,我们需要在类路径中包含某些库文件。我们已经为gradle的测试任务执行此操作,但不为黄瓜任务执行此操作

鉴于这些文件位于我们项目中build/dyanamodb-local的文件夹中,有没有办法将它们包含在 Cucumber 任务的类路径中?

build.gradle 文件:

plugins {
id 'java'
id 'jacoco'
id 'checkstyle'
id 'pmd'
}
repositories {
jcenter()
maven { url 'https://jitpack.io' }
maven { url "https://s3.eu-central-1.amazonaws.com/dynamodb-local-frankfurt/release" }
}

def jacksonVersion = "2.10.3"
def jupiterVersion = "5.6.0"
def awsSdkVersion = "1.11.791"
apply plugin: 'java'
apply plugin: 'jacoco'
apply plugin: 'checkstyle'
apply plugin: 'pmd'
configurations.testImplementation.canBeResolved = true
configurations {
cucumberRuntime {
extendsFrom testImplementation
}
}
dependencies {
implementation group: 'com.amazonaws', name: 'aws-lambda-java-core', version: '1.2.0'
implementation group: 'com.amazonaws', name: 'aws-lambda-java-events', version: '2.2.7'
implementation group: 'com.amazonaws', name: 'aws-java-sdk-lambda', version: awsSdkVersion
implementation group: 'com.amazonaws', name: 'aws-java-sdk-dynamodb', version: awsSdkVersion
implementation group: 'com.fasterxml.jackson.datatype', name: 'jackson-datatype-jdk8', version: jacksonVersion
implementation group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: jacksonVersion
implementation group: 'com.fasterxml.jackson.module', name: 'jackson-module-parameter-names', version: jacksonVersion
implementation group: 'com.github.BIBSYSDEV', name: 'nva-commons', version: '0.3.5'
testImplementation group: 'com.amazonaws', name: 'DynamoDBLocal', version: '1.12.0'
testImplementation group: 'com.almworks.sqlite4java', name: 'sqlite4java', version: '1.0.392'
testImplementation group: 'io.cucumber', name: 'cucumber-java', version: '5.6.0'
testImplementation group: 'io.cucumber', name: 'cucumber-picocontainer', version: '5.6.0'
testImplementation group: 'io.cucumber', name: 'cucumber-junit', version: '5.6.0'
testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter', version: jupiterVersion
testImplementation group: 'org.hamcrest', name: 'hamcrest', version: '2.2'
}
task copyNativeDeps(type: Copy) {
from(configurations.testImplementation) {
include "*.dylib"
include "*.so"
include "*.dll"
}
into 'build/dynamodb-local'
}
test.dependsOn copyNativeDeps
test.doFirst {
systemProperty "java.library.path", 'build/dynamodb-local'
}
test {
useJUnitPlatform()
failFast = true
testLogging {
events 'skipped', 'passed', 'failed'
}
finalizedBy jacocoTestReport
}
task cucumber() {
dependsOn assemble, compileTestJava
doLast {
javaexec {
main = "io.cucumber.core.cli.Main"
classpath = configurations.cucumberRuntime+ configurations.testImplementation + sourceSets.main.output + sourceSets.test.output
args = ['--plugin', 'pretty', '--glue', 'features', 'src/test/resources']
}
}
}

编辑:我混合了类路径和库路径。我需要的是编辑库路径。但是,如果需要编辑类路径,我建议查看@madhead提供的解决方案

我假设您有黄瓜的配置,就像文档中一样:

configurations {
cucumberRuntime {
extendsFrom testImplementation
}
}

然后只需将文件夹添加到配置中,例如:

dependencies {
cucumberRuntime(fileTree('build/dyanamodb-local'))
}

它应该可以解决问题。

与其污染您的依赖项,不如考虑使用 amazon/dynamodb-local Docker 镜像或 LocalStack。

我通过在黄瓜任务的javaexec配置中添加系统属性来使其工作。黄瓜任务现在如下:

task cucumber() {
dependsOn assemble, compileTestJava
doLast {
javaexec {
main = "io.cucumber.core.cli.Main"
systemProperties =[ "java.library.path" :'build/dynamodb-local']
classpath = configurations.cucumberRuntime+ configurations.testImplementation + sourceSets.main.output + sourceSets.test.output
args = ['--plugin', 'pretty', '--glue', 'features', 'src/test/resources']
}
}
}

最新更新