【问题标题】:Scala/Java Spark [closed]Scala/Java Spark [关闭]
【发布时间】:2017-02-23 10:39:15
【问题描述】:
我需要帮助开发企业级 Java/Scala 应用程序,其中包含多个组件/模块,涉及多个 JARS。
目的是,目前现有的代码是作为单个 JAR 的单个组件开发的,基本上我需要一些关于如何将这个巨大的组件分解为多个 Spark/Scala 模块和自己的 JAR 的指导,以及所有常用的 util 函数需要在 CORE 等通用组件中。
这种重构背后的想法是根据用例并行调用各个组件,而不是按顺序调用每个模块。
是否有任何工具可以使这个过程(至少部分)自动化,或者我们是否在 IntelliJ IDE 中内置了任何插件?
欢迎提出建议或指点。
【问题讨论】:
标签:
java
scala
apache-spark
【解决方案1】:
AFAIK 没有工具可以做到这一点..
但您可以使用 Maven Archetype(命令行 maven 选项)生成多模块项目(aggregator-style)。
我举了一个 maven multi module project 的例子。
我认为您可以为 Gradle 或其他工具使用相同的方法
调整你的代码
从多模块项目创建原型
为多模块项目创建原型就像为单模块项目创建原型一样简单。
只需移动到多模块项目的根目录并调用mvn archetype:create-from-project。在用作示例的原型中,某些文件需要不过滤。这是通过在 archetype.filteredExtensions 属性中为原型插件提供一些值来实现的。
$ mvn archetype:create-from-project -Darchetype.filteredExtensions=java
[INFO] Scanning for projects...
[INFO] Reactor build order:
[INFO] archetype
[INFO] archetype :: business domain model
[INFO] archetype :: business services
[INFO] archetype :: persistence layer
[INFO] archetype :: infrastructure
[INFO] archetype :: remoting
[INFO] archetype :: web services
[INFO] archetype :: web application
[INFO] archetype :: enterprise application
[INFO] Searching repository for plugin with prefix: 'archetype'.
[INFO] ------------------------------------------------------------------------
[INFO] Building archetype
[INFO] task-segment: [archetype:create-from-project] (aggregator-style)
[INFO] ------------------------------------------------------------------------
[INFO] Preparing archetype:create-from-project
[INFO] ------------------------------------------------------------------------
[INFO] Building archetype
[INFO] ------------------------------------------------------------------------
[INFO] No goals needed for project - skipping
[INFO] ------------------------------------------------------------------------
[INFO] Building archetype :: business domain model
[INFO] ------------------------------------------------------------------------
[INFO] No goals needed for project - skipping
[INFO] ------------------------------------------------------------------------
[INFO] Building archetype :: business services
[INFO] ------------------------------------------------------------------------
[INFO] No goals needed for project - skipping
[INFO] ------------------------------------------------------------------------
[INFO] Building archetype :: persistence layer
[INFO] ------------------------------------------------------------------------
[INFO] No goals needed for project - skipping
[INFO] ------------------------------------------------------------------------
[INFO] Building archetype :: infrastructure
[INFO] ------------------------------------------------------------------------
[INFO] No goals needed for project - skipping
[INFO] ------------------------------------------------------------------------
[INFO] Building archetype :: remoting
[INFO] ------------------------------------------------------------------------
[INFO] No goals needed for project - skipping
[INFO] ------------------------------------------------------------------------
[INFO] Building archetype :: web services
[INFO] ------------------------------------------------------------------------
[INFO] No goals needed for project - skipping
[INFO] ------------------------------------------------------------------------
[INFO] Building archetype :: web application
[INFO] ------------------------------------------------------------------------
[INFO] [gwt:eclipse {execution: default}]
[INFO] Unpack native libraries required to run hosted browser
[INFO] [gwt:generateAsync {execution: default}]
[INFO] ------------------------------------------------------------------------
[INFO] Building archetype :: enterprise application
[INFO] ------------------------------------------------------------------------
[INFO] No goals needed for project - skipping
[INFO] Setting property: classpath.resource.loader.class => 'org.codehaus.plexus.velocity.ContextClassLoaderResourceLoader'.
[INFO] Setting property: velocimacro.messages.on => 'false'.
[INFO] Setting property: resource.loader => 'classpath'.
[INFO] Setting property: resource.manager.logwhenfound => 'false'.
[INFO] [archetype:create-from-project]
[INFO] Setting default groupId: com.capgemini.archetype
[INFO] Setting default artifactId: archetype
[INFO] Setting default version: 1.0.0-SNAPSHOT
[INFO] Setting default package: com.capgemini
[INFO] Archetype created in target/generated-sources/archetype
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 7 seconds
[INFO] Finished at: Mon Sep 15 19:11:17 CEST 2008
[INFO] Final Memory: 19M/36M
[INFO] ------------------------------------------------------------------------
也看看