使用 Maven + Java 1.8 创建 AWS Flow Jar

AWS Flow Jar creation with Maven + Java 1.8

有没有人能够使用 Java 1.8 + AWS Flow + Maven 编译应用程序?

我有一个已建立的 Java 应用程序,它是使用 Java 1.8 创建的,它使用 AWS 库和 AWS 流程框架。我希望现在可以自动构建产品,我选择使用 Maven。到目前为止,项目是在 eclipse 中手动导出的。

我已经到了可以构建一个 Jar 的地步,其中包含我们生成的工作流 类(外部客户端 + 工厂)以及我理解的方面 类(xxxxx$1.class, xxxxx$2.class ).

最终目标是让编织在编译时发生。

然而,当 运行使用 maven 构建的 jar 时,工作流没有按预期工作。应用程序完全忽略 @Asynchronous 注释并导致未就绪状态。因此,它将取消我们希望执行的 activity 的调度。

我创建了一个具有单一工作流程的简单应用程序,activity 来展示我遇到的问题。此版本已通过 eclipse 导出并运行,但在通过 POM 构建时出现错误。

Start with message: With Comp
Created Workers
Added implentations
Nov 28, 2016 12:14:11 PM com.amazonaws.services.simpleworkflow.flow.worker.GenericWorker start
INFO: start: GenericWorkflowWorker[super=GenericWorkflowWorker[service=com.amazonaws.services.simpleworkflow.AmazonSimpleWorkflowClient@163e4e87, domain=Experimental, taskListToPoll=TEST, identity=3174@ip-10-0-1-141, backoffInitialInterval=100, backoffMaximumInterval=60000, backoffCoefficient=2.0], workflowDefinitionFactoryFactory=com.amazonaws.services.simpleworkflow.flow.pojo.POJOWorkflowDefinitionFactoryFactory@56de5251]
Nov 28, 2016 12:14:12 PM com.amazonaws.services.simpleworkflow.flow.worker.GenericWorker start
INFO: start: GenericActivityWorker [super=GenericActivityWorker[service=com.amazonaws.services.simpleworkflow.AmazonSimpleWorkflowClient@4c60d6e9, domain=Experimental, taskListToPoll=TEST, identity=3174@ip-10-0-1-141, backoffInitialInterval=100, backoffMaximumInterval=60000, backoffCoefficient=2.0], taskExecutorThreadPoolSize=100]
Start workers
Now Sleep
Sleep Done
Make Call
DECIDER 1
DECIDER 2
DECIDER DOING CATCH
java.lang.IllegalStateException: not ready
        at com.amazonaws.services.simpleworkflow.flow.core.Settable.get(Settable.java:91)
        at com.amazonaws.services.simpleworkflow.flow.core.Functor.get(Functor.java:35)
        at root.DeciderWFMethods.printMessage(DeciderWFMethods.java:79)
        at root.DeciderWFMethods.access0(DeciderWFMethods.java:6)
        at root.DeciderWFMethods.doTry(DeciderWFMethods.java:54)
        at --- continuation ---.(:0)
        at root.DeciderWFMethods.workflowExecute(DeciderWFMethods.java:42)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at com.amazonaws.services.simpleworkflow.flow.pojo.POJOWorkflowDefinition.invokeMethod(POJOWorkflowDefinition.java:150)
        at com.amazonaws.services.simpleworkflow.flow.pojo.POJOWorkflowDefinition.access(POJOWorkflowDefinition.java:148)
        at com.amazonaws.services.simpleworkflow.flow.pojo.POJOWorkflowDefinition.doTry(POJOWorkflowDefinition.java:76)
        at --- continuation ---.(:0)
        at com.amazonaws.services.simpleworkflow.flow.pojo.POJOWorkflowDefinition.execute(POJOWorkflowDefinition.java:66)
        at com.amazonaws.services.simpleworkflow.flow.worker.AsyncDecider$WorkflowExecuteAsyncScope.doAsync(AsyncDecider.java:70)
DECIDER DOING FINALLY

比较了从 eclipse 和 maven 构建生成的 jar 的内容,对我来说没有明显不同。

我在网上搜索了一些有用的东西,但只找到了 Java 1.6 / 1.7 的示例,没有找到 1.8 的示例。

在这一点上,我应该提到我是 Maven 的新手,但相信它更有可能是 AspectJ 配置/AWS 构建工具问题,而不是 Maven 问题。

构建 & 运行

示例应用程序正在 运行 EC2 实例上使用 EC2 IAM 角色执行到名为 'Experimental'

的工作流域

它接受 activity 大写的字符串,然后决策者应该打印来自 activity 的消息。

建造。

mvn clean
mvn package

然后运行编译编译的jar

java -jar Test.jar "a test message"

.

GitHub Link

https://github.com/jwhitefield-hark/aws-flow-maven

如有任何建议,我们将不胜感激。

在 AWS 论坛上好心人的帮助下,我们已经设法解决了这个问题。

我们的问题有两个。

我们将编译器参数设置为 -proc:none 这阻止了构建完成。

同样在我们的 aspectj-maven 插件中,我们将执行设置为 process-sources,这似乎是我们问题的症结所在,因为这会阻止创建良好的构建,也不会向我们显示正在生成的错误作为包含我们的编译器参数的结果。

作为 aspectj-maven-plugin 中的旁注,我们已将目标设置为 1.6,这不是必需的。我们尝试过,因为看起来 eclipse 可能一直在使用这些设置。无论哪种方式,这些属性似乎都没有影响。

我们还将 aspectj 库从 aws-java-sdk-swf-libraries 更改为 aws-swf-build-tools 以使其保持最新。

https://forums.aws.amazon.com/thread.jspa?threadID=243838&tstart=0