一个pom中的多个工件ID

时间:2012-01-31 06:17:56

标签: maven maven-jar-plugin

有一个maven项目(jar),但现在它需要被分成两个工件

我希望有两个maven神器,如下面的

<groupId>xxx</groupId>
<artifactId>xxx-client</groupId>

<groupId>xxx</groupId>
<artifactId>xxx-impl</groupId>

但所有代码都在一个项目中。

  

我的问题是,如何在不改变项目的情况下打包拖曳所需的工件。

然后,

  

mvn包部署

会自动将这两个工件部署到存储库中 实际上我不想将这些项目分成两个maven项目。

4 个答案:

答案 0 :(得分:3)

我不确定在一个POM中是否有可能有两个<artifactId>标签,因为它是唯一的。你可以做的是,你可以有两个pom文件,比如pom.xmlpom_impl.xml,现在

  • 部署客户端,mvn package deploy
  • 部署impl do,mvn -f pom_impl.xml package deploy

从未尝试过。


澄清:这个问题看起来很模糊,好像你有一个项目,但你想生成两个相同代码库的工件(client和impl)。再次阅读它,我觉得你有两个项目(两个不同的代码库),但你只是想统一它,使它表现为同一个项目的两个模块。我的回答是第一个案例。

答案 1 :(得分:1)

如果我理解问题是正确的,那么你需要为你的两个项目(xxx-client和xxx-impl)提供一个超级pom(xxx / pom.xml)和两个不同的pom。超级pom的结构将是这样的:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="
             http://maven.apache.org/POM/4.0.0
             http://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <groupId>xxx</groupId>
    <artifactId>xxx</artifactId>
    <packaging>pom</packaging>

    <modules>
        <module>xxx-client</module>
        <module>xxx-impl</module>
    </modules>
</project>

然后当你部署主pom时,它也将部署它的模块。

如果您想了解有关super pommodules的更多信息,请参阅以下内容。

答案 2 :(得分:0)

这在Maven世界中被称为“多模块项目”。您可以找到有关如何执行此操作的信息,例如here。实际上,您需要两个单独的POM和另外一个将两者结合起来。

答案 3 :(得分:0)

specify pom

制作两个pom,然后在命令行中指定pom,这是最简单的方法。