将 Dynamodb local 作为 Gradle Java 项目的一部分运行

2022-09-04 05:46:14

我正在尝试运行 DynamoDB 本地版以进行测试。我按照亚马逊提供的步骤进行设置,并运行jar本身工作正常(链接到亚马逊的教程 这里).但是,本教程不会在您自己的项目中运行jar。我不希望所有其他开发人员每次测试代码时都必须抓住一个jar并在本地运行它。

这就是我的问题所在。作为测试的一部分,我很难在网上找到有关如何配置 Gradle 项目以运行 DynamoDB 本地服务器的任何示例。我发现下面的maven示例 https://github.com/awslabs/aws-dynamodb-examples/blob/master/src/test/java/com/amazonaws/services/dynamodbv2/DynamoDBLocalFixture.java#L32,并尝试将其转换为Gradle,但是他们正在使用的所有导入语句都出现了错误。错误是找不到资源。com.amazonaws.services.dynamodbv2.local

我进入了他们项目的pom,并将以下内容放入我的文件中以模拟它。build.gradle

//dynamodb local dependencies
testCompile('com.amazonaws:aws-java-sdk-dynamodb:1.10.42')
testCompile('com.amazonaws:aws-java-sdk-cloudwatch:1.10.42')
testCompile('com.amazonaws:aws-java-sdk:1.3.0')
testCompile('com.amazonaws:amazon-kinesis-client:1.6.1')
testCompile('com.amazonaws:amazon-kinesis-connectors:1.1.1')
testCompile('com.amazonaws:dynamodb-streams-kinesis-adapter:1.0.2')
testCompile('com.amazonaws:DynamoDBLocal:1.10.5.1')

导入语句仍然失败。下面是一个失败的示例。

import com.amazonaws.services.dynamodbv2.local.embedded.DynamoDBEmbedded;

TL;DR

是否有人设法让 DynamoDB 本地 JAR 作为 Gradle 项目的一部分执行,或者有一个指向优秀教程的链接(它不一定是我链接到的教程)。


答案 1

我们有 DynamoDB 本地与 gradle 合作。以下是您需要添加到 gradle.build 文件中的内容:

对于 gradle 4.x 及更低版本

1) 添加到存储库部分:

    maven {
        url 'http://dynamodb-local.s3-website-us-west-2.amazonaws.com/release'
    }

2) 添加到依赖项部分(假设您正在将其用于测试):

    testCompile group: 'com.amazonaws', name: 'DynamoDBLocal', version: 1.11.0

3)接下来的两个步骤是棘手的部分。首先将本机文件复制到一个目录:

task copyNativeDeps(type: Copy) {
    from (configurations.testCompile) {
        include "*.dylib"
        include "*.so"
        include "*.dll"
    }
    into 'build/libs'
}

4)然后确保在java库路径中包含此目录(在我们的例子中为build/libs),如下所示:

test.dependsOn copyNativeDeps
test.doFirst {
    systemProperty "java.library.path", 'build/libs'
}

现在,您应该能够运行 ./gradlew 测试,并让您的测试到达本地 DynamoDB。


答案 2

对于 Gradle 5.x,以下解决方案有效

 maven {
        url 'http://dynamodb-local.s3-website-us-west-2.amazonaws.com/release'
    }

configurations {
        dynamodb
    }

dependencies {
    testImplementation 'com.amazonaws:DynamoDBLocal:1.11.477'
    dynamodb fileTree (dir: 'lib', include: ["*.dylib", "*.so", "*.dll"])
    dynamodb 'com.amazonaws:DynamoDBLocal:1.11.477'
}

task copyNativeDeps(type: Copy) {
    from configurations.dynamodb
    into "$project.buildDir/libs/"
}

test.dependsOn copyNativeDeps
test.doFirst {
    systemProperty "java.library.path", 'build/libs'
}

推荐