Run Dynamodb locally as part of a Java Gradle project

I am trying to run DynamoDB locally for testing purposes. I followed the steps provided by amazon to configure it, and launching jar itself works fine (link to amazon tutorial here ). However, the tutorial does not apply to running jar in your own project. I don’t want all other developers to take the jar and run it locally every time they test their code.

This is where my question arises. It was very difficult for me to find examples on the Internet of how to configure the Gradle project to start the local DynamoDB server as part of my tests. I found the following maven example https://github.com/awslabs/aws-dynamodb-examples/blob/master/src/test/java/com/amazonaws/services/dynamodbv2/DynamoDBLocalFixture.java#L32 and trying to convert it to Gradle but I get errors for all import statements com.amazonaws.services.dynamodbv2.localthat they use. Errors in the fact that the resource could not be found.

I went into their project and inserted the build.gradlefollowing into a file to imitate it.

//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 statements are still not executed. Here is an example of one that fails.

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

TL DR

- JAR DynamoDB Gradle ( , ).

+10
5

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) , ( build/libs) java :

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

. /gradlew, DynamoDB.

+22

, , :

+1

sqlite4java.library.path Gradle, .

, , IDE (IntelliJ IDEA), , , init, :

AwsDynamoDbLocalTestUtils.initSqLite();
AmazonDynamoDBLocal amazonDynamoDBLocal = DynamoDBEmbedded.create();

: https://github.com/redskap/aws-dynamodb-java-example-local-testing/blob/master/src/test/java/io/redskap/java/aws/dynamodb/example/local/testing/AwsDynamoDbLocalTestUtils.java

GitHub, : https://github.com/redskap/aws-dynamodb-java-example-local-testing

+1

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'
}
+1

2018 Amazon Docker Amazon DynamoDB Local. - JAR , , sqlite4java.

, Docker :

docker run -p 8000:8000 amazon/dynamodb-local

, , CI. CI , . Gitlab CI/CD:

test:
  stage: test
  image: openjdk:8-alpine
  services:
    - name: amazon/dynamodb-local
      alias: dynamodb-local
  script:
    - ./gradlew clean test

, test DynamoDB http://dynamodb-local:8000.

, - localstack. AWS, DynamoDB. Isage , , AWS- API :

test:
  stage: test
  image: openjdk:8-alpine
  services:
    - name: localstack/localstack
    alias: localstack
  script:
    - ./gradlew clean test

, . /IoC, , . , . : DynamoDB Local localstack, image!

0

Source: https://habr.com/ru/post/1621145/


All Articles