【发布时间】:2014-10-20 17:26:02
【问题描述】:
我正在寻找一种方法来将来自另一个 pom.xml 的项目中的所有模块包含在内。所以在我的情况下,我有一个父 pom,包装设置为 pom。它包含 3 个子模块,它们在另一个 api 模块中实现我的接口。我想在 maven 中动态包含我的项目中的所有子模块。
在这种情况下,我想在另一个模块中包含连接器1、连接器2、连接器3,而不必隐式指定连接器1、2、3。
connectors - packaging: pom
connector1 - packaging: jar
connector2 - packaging: jar
connector3 - packaging: jar
我尝试在我的项目中包含连接器 pom,但这不起作用。我希望用 pom 指定父包将包括子模块,但这不起作用。是否有任何解决方法可以做到这一点?
更新
这更让我恼火,因为我想简单地添加一个连接器并包含项目的所有子模块依赖 jar。这将使 pom 更易于阅读。
不必像这样注册所有子依赖项
<dependencies>
<dependency>
<groupId>com.foo</groupId>
<artifactId>connector1</artifactId>
<version>0.0.1</version>
</dependency>
<dependency>
<groupId>com.foo</groupId>
<artifactId>connector1-api</artifactId>
<version>0.0.1</version>
</dependency>
<dependency>
<groupId>com.foo</groupId>
<artifactId>connector1-etl</artifactId>
<version>0.0.1</version>
</dependency>
<dependency>
<groupId>com.foo</groupId>
<artifactId>connector1-persistence</artifactId>
<version>0.0.1</version>
</dependency>
<dependency>
<groupId>com.foo</groupId>
<artifactId>connector2</artifactId>
<version>0.0.1</version>
</dependency>
<dependency>
<groupId>com.foo</groupId>
<artifactId>connector2-api</artifactId>
<version>0.0.1</version>
</dependency>
<dependency>
<groupId>com.foo</groupId>
<artifactId>connector2-etl</artifactId>
<version>0.0.1</version>
</dependency>
<dependency>
<groupId>com.foo</groupId>
<artifactId>connector2-persistence</artifactId>
<version>0.0.1</version>
</dependency>
<dependency>
<groupId>com.foo</groupId>
<artifactId>connector2-other</artifactId>
<version>0.0.1</version>
</dependency>
...
</dependencies>
这只是澄清原始问题的一个示例。它不存在,如果它确实有效,可能会产生反作用。
<dependencies>
<dependency>
<groupId>com.foo</groupId>
<artifactId>connector1</artifactId>
<version>0.0.1</version>
<type>pom</type>
<include>submodules</include>
</dependency>
<dependency>
<groupId>com.foo</groupId>
<artifactId>connector2</artifactId>
<version>0.0.1</version>
<type>pom</type>
<include>submodules</include>
</dependency>
</dependencies>
如果我没记错的话,我正在为一个订购系统创建一个模块化项目,其中我有一个我们内部系统将使用的通用 api (REST)。我正在创建一个路由系统,我可以在其中根据订单标准(国家、优先税等)将订单路由到单个履行中心。每个履行中心都有自己的 api(连接器)。
这个例子在原问题中被大大简化,使问题更简洁。在实际项目中,每个连接器 (1,2,3) 将是一个带有多个依赖 jar 的单独 pom。一个用于他们的客户端 api,然后是一些与我的原始 api 匹配的 etl 代码。
我不记得我是如何解决这个问题的。我想我只需要包含所有子依赖项。
【问题讨论】:
-
你在某个地方(github?)有一个示例项目,我们可以更好地了解你到底想要做什么?
-
@RobinJonsson 问题不清楚。 include 到底是什么意思?你想要什么最终结果?你的意思是要自动填写
connectorsPOM 中的<modules>部分吗?或者别的地方?你能扩大一点吗? -
@Tunaki 我想要的结果是能够添加新的“connectorX”包,而不必在其他地方将它们指定为依赖项。例如,我有另一个模块被打包为 WAR。我想将 WAR 的依赖项添加到“连接器”,每当我向连接器添加新的“子模块”(可能是 connector4)时,它都会自动与 WAR 文件一起打包。我的连接器没有所需的包装格式。连接器是否打包为单独的 JAR 或 uber-jar 并不重要。只要它们包含在我的 WAR 中。
-
@Tunaki 我认为这里的根本问题是我不能在
connectors模块上添加<packaging>jar</packaging,因为只允许pom。这意味着我无法从另一个模块添加对connectors的依赖并自动获取所有子模块。