使用 Gradle 设置 AWS 开发环境
Posted
技术标签:
【中文标题】使用 Gradle 设置 AWS 开发环境【英文标题】:AWS Dev env setup with Gradle 【发布时间】:2018-08-07 16:08:30 【问题描述】:我正在为开发人员设置一个便利脚本,以便能够快速启动和运行,而无需启动多个终端会话、启动 DynamoDB、创建表,然后启动 SAM Local API 来模拟请求。我决定用 Gradle 来做这件事,部分原因是我想更好地学习 Gradle,但也因为它提供了一个简单的包装器来包含在 repo、可定制的任务和 Java 依赖项管理中。
所以我确定的步骤是:
-
获取 DynamoDB 本地 jar
开始吧
创建表
启动 AWS Sam 本地 API
我遇到了 jar 主类无法找到依赖库的问题。这是构建 gradle
如您所见,我将二进制文件放在构建目录中,以便 Gradle 可以根据需要对其进行清理,其中还包含所需的库以及 DynamoDbLocal-1.10.57.jar,如下所示:
下面是 Gradle 任务的终端堆栈跟踪
所以它无法在 jar 的主运行器中找到 org/apache/commons/cli/ParseException 类。我必须使用 JDGui 打开清单并找到 runner 类是什么,所以我也可能不正确?
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')
【问题讨论】:
对于屏幕截图真的很抱歉,但是无论我如何尝试格式化它,SO 都不会让我提交任何代码。令人难以置信的令人沮丧的经历。可能是我最后一次提问了。 我认为与您的解释相比,您必须编写很多代码。也许您可以将引用块或普通文本用于堆栈跟踪或文件结构。不过,请编辑您的问题,以便至少可以复制粘贴代码 sn-p。 我认为有很多不相关的细节。这个问题实际上可能很简单——我应该怎么做才能找到那个类。 【参考方案1】:=
运算符调用 Groovy 中的 set<Field>
方法。这就是runDynamoDB
任务的类路径只包含一个文件的原因。您应该使用附加到类路径的classpath(Object... paths)
:
将行更改为以下示例以将文件添加到默认类路径:
classpath files(...) // without =
这与systemProperty
条目的原理相同,它也附加到之前的系统属性集合。
请注意,您的构建脚本违反了很多 Gradle 约定,并且包含一些问题,将来可能会导致错误:
您的println
语句不会在相应任务运行时执行,而是在它们被配置时执行(无论任务是否运行)。您需要使用 doFirst
和 doLast
闭包。
您应该将本地文件依赖项添加到构建脚本(在dependencies
部分中)并使用 Gradle 配置来构建您的类路径,而不是自己收集文件及其路径。
【讨论】:
谢谢@lu.koerfer。我记下了您关于约定的注释并进行了重构以将 jars 添加到依赖项中并修复了 println 语句。现在可以在本地运行 DyanomDB!以上是关于使用 Gradle 设置 AWS 开发环境的主要内容,如果未能解决你的问题,请参考以下文章
gradle怎么设置jdk版本,不用系统环境变量的jdk-Android开发问答