Gradle 的 AWS 开发环境设置
AWS Dev env setup with Gradle
我正在为开发人员设置一个方便的脚本,以便能够快速启动和 运行ning,而无需启动多个终端会话,启动 DynamoDB,创建一个 table,然后启动SAM Local API 来模拟请求。我决定用 Gradle 来做这件事,部分原因是我想更好地学习 Gradle,但也因为它提供了一个简单的包装器来包含在 repo、可定制的任务和 Java 依赖管理.
所以我确定的步骤是:
- 获取 DynamoDB 本地 jar
- 开始吧
- 创建 tables
- 启动 AWS Sam Local API
我 运行 遇到了 jar main class 无法找到依赖库的问题。这是构建 gradle
如您所见,我将二进制文件放在构建目录中,以便 Gradle 可以根据需要对其进行清理,其中还包含所需的库以及 DynamoDbLocal-1.10。57.jar,像这样:
下面是 Gradle 任务的终端堆栈跟踪
因此无法在 jar 的主要 运行 内找到 org/apache/commons/cli/ParseException class。我不得不使用 JDGui 打开清单并找到 运行ner class 是什么所以我也可能是不正确的?
apply plugin: 'java'
repositories {
mavenCentral()
maven {
url 'http://dynamodb-local.s3-website-us-west-2.amazonaws.com/release'
}
}
def _LIBS = "$buildDir/libs"
defaultTasks 'run'
task copyToLib(type: Copy) {
doFirst {
println "Copying libs"
}
into _LIBS
from configurations.runtime
doLast {
println "copy complete"
}
}
task runDynamoDB(dependsOn: copyToLib, type: JavaExec) {
doFirst {
println "Starting DynamoDB local..."
}
systemProperty "java.library.path", _LIBS
classpath sourceSets.main.runtimeClasspath
main = 'com.amazonaws.services.dynamodbv2.local.main.ServerRunner'
args "-inMemory", "-sharedDb"
doLast {
println "DynamoDB started"
}
}
task createTables(dependsOn: runDynamoDB) {
//aws dynamodb create-table --cli-input-json file://table_config.json --endpoint-url http://localhost:8000
}
task runSamLocalApi(dependsOn: runDynamoDB) {
doFirst {
println "Starting Sam Local API..."
}
doLast {
println "Sam Local API started"
}
}
task run(dependsOn: runSamLocalApi) {
doFirst {
println "Starting..."
}
doLast {
println "Complete"
}
}
dependencies {
compile 'com.amazonaws:DynamoDBLocal:1.10.+'
compile fileTree(dir: _LIBS, include: ['*.jar'])
runtime files(_LIBS + '/DynamoDBLocal-1.10.57.jar')
}
=
运算符调用 Groovy 中的 set<Field>
方法。这就是 runDynamoDB
任务的类路径只包含一个文件的原因。您应该使用附加到类路径的 classpath(Object... paths)
:
将行更改为以下示例以将文件添加到默认类路径:
classpath files(...) // without =
这与 systemProperty
条目的原理相同,它也附加到先前的系统属性集合。
请注意,您的构建脚本违反了许多 Gradle 约定并包含一些问题,这些问题将来可能会导致错误:
- 您的
println
语句不会在相应的任务 运行 时执行,而是在配置它们时执行(无论任务是否 运行 )。您需要使用 doFirst
和 doLast
闭包。
- 您应该将本地文件依赖项添加到构建脚本(在
dependencies
部分)并使用 Gradle 配置来构建类路径,而不是自己收集文件及其路径.
我正在为开发人员设置一个方便的脚本,以便能够快速启动和 运行ning,而无需启动多个终端会话,启动 DynamoDB,创建一个 table,然后启动SAM Local API 来模拟请求。我决定用 Gradle 来做这件事,部分原因是我想更好地学习 Gradle,但也因为它提供了一个简单的包装器来包含在 repo、可定制的任务和 Java 依赖管理.
所以我确定的步骤是:
- 获取 DynamoDB 本地 jar
- 开始吧
- 创建 tables
- 启动 AWS Sam Local API
我 运行 遇到了 jar main class 无法找到依赖库的问题。这是构建 gradle
如您所见,我将二进制文件放在构建目录中,以便 Gradle 可以根据需要对其进行清理,其中还包含所需的库以及 DynamoDbLocal-1.10。57.jar,像这样:
下面是 Gradle 任务的终端堆栈跟踪
因此无法在 jar 的主要 运行 内找到 org/apache/commons/cli/ParseException class。我不得不使用 JDGui 打开清单并找到 运行ner class 是什么所以我也可能是不正确的?
apply plugin: 'java'
repositories {
mavenCentral()
maven {
url 'http://dynamodb-local.s3-website-us-west-2.amazonaws.com/release'
}
}
def _LIBS = "$buildDir/libs"
defaultTasks 'run'
task copyToLib(type: Copy) {
doFirst {
println "Copying libs"
}
into _LIBS
from configurations.runtime
doLast {
println "copy complete"
}
}
task runDynamoDB(dependsOn: copyToLib, type: JavaExec) {
doFirst {
println "Starting DynamoDB local..."
}
systemProperty "java.library.path", _LIBS
classpath sourceSets.main.runtimeClasspath
main = 'com.amazonaws.services.dynamodbv2.local.main.ServerRunner'
args "-inMemory", "-sharedDb"
doLast {
println "DynamoDB started"
}
}
task createTables(dependsOn: runDynamoDB) {
//aws dynamodb create-table --cli-input-json file://table_config.json --endpoint-url http://localhost:8000
}
task runSamLocalApi(dependsOn: runDynamoDB) {
doFirst {
println "Starting Sam Local API..."
}
doLast {
println "Sam Local API started"
}
}
task run(dependsOn: runSamLocalApi) {
doFirst {
println "Starting..."
}
doLast {
println "Complete"
}
}
dependencies {
compile 'com.amazonaws:DynamoDBLocal:1.10.+'
compile fileTree(dir: _LIBS, include: ['*.jar'])
runtime files(_LIBS + '/DynamoDBLocal-1.10.57.jar')
}
=
运算符调用 Groovy 中的 set<Field>
方法。这就是 runDynamoDB
任务的类路径只包含一个文件的原因。您应该使用附加到类路径的 classpath(Object... paths)
:
将行更改为以下示例以将文件添加到默认类路径:
classpath files(...) // without =
这与 systemProperty
条目的原理相同,它也附加到先前的系统属性集合。
请注意,您的构建脚本违反了许多 Gradle 约定并包含一些问题,这些问题将来可能会导致错误:
- 您的
println
语句不会在相应的任务 运行 时执行,而是在配置它们时执行(无论任务是否 运行 )。您需要使用doFirst
和doLast
闭包。 - 您应该将本地文件依赖项添加到构建脚本(在
dependencies
部分)并使用 Gradle 配置来构建类路径,而不是自己收集文件及其路径.