【发布时间】:2012-03-01 09:39:43
【问题描述】:
我正在使用 Maven 3 来处理一个(大型)项目。该项目使用 Scala、Akka 和 Spray 框架定义了一组 REST 服务。每个服务都被定义为一个独立的项目,通过“mvn package”命令生成一个 WAR。
我必须将这些不同的服务“组装”成一个“系统”,即在单个 WAR 中为特定目的部署这些服务的子集。 Maven WAR 覆盖作为第一印象效果很好:只需创建一个新项目,然后添加要作为依赖项包含的服务。
<dependencies>
<dependency>
<groupId>net.modelbased.sensapp.service</groupId>
<artifactId>net.modelbased.sensapp.service.metamodel.repository</artifactId>
<version>0.0.1</version>
<type>war</type>
</dependency>
</dependencies>
效果很好,独立服务中包含的类都包含在最终的WAR中。
jar tf target/net.modelbased.sensapp.system.envision-0.0.1-SNAPSHOT.war
[...]
WEB-INF/classes/net/modelbased/sensapp/service/metamodel/repository/ModelLister.class
[...]
但是……Spray 框架需要实现一个引导程序,即一个加载已实现服务的类。这个文件必须被编译,因为它是一个普通的 scala 类。但看起来 maven 没有在编译类路径中包含 WAR 依赖项。
我看到了 WARpath 插件 (http://static.appfuse.org/maven-warpath-plugin/) ...但它看起来或多或少已经过时了。是否有一种“标准”方式来做我想做的事情(即,在编译类路径中包含一个 WAR)。
附言。该项目的要求之一是每个服务必须可以作为独立的工件进行部署。一种解决方案可能是将服务的核心实现为 JAR 项目,并提供一个 WAR 项目,其中包括对 JAR 和相关配置文件的引用。但它会将定义的项目数量乘以 2,这在某种程度上并不是最优的......
【问题讨论】:
标签: rest maven war dependency-management