4

我有使用 Maven 构建和发布的人工制品。artefact 的原始 pom.xml 包含通常的项目信息(artifactId、name 等)和依赖项。没关系。但是 pom.xml 还包含私有信息,例如 SCM URL、开发人员的名称或父级人工制品。

有什么方法可以告诉 Maven 生成一个经过清理的 pom.xml,以便可以将工件公开发布,而不会破坏依赖项等技术相关信息?

SCM URL、开发人员列表和父 pom(仅用于 DepMgmt 定义和其他元数据)的存在都与人工制品的用户无关,所以我认为我可以从发布 pom.xml

存储库管理器(如 Archiva)中的 pom.xml 和打包在人工制品的 jar 文件中的 pom.xml 都包含这些信息。我认为 Maven 只是在复制整个事情。

总结一下:

我有:

<project>
   <modelVersion>4.0.0</modelVersion>
   <groupId>org.example</groupId>
   <artifactId>my-artifact</artifactId>
    <scm>
        <connection>scm:svn:http://buildmachine/org.example/my-artifact/trunk</connection>
        <developerConnection>scm:svn:http://buildmachine/org.example/my-artifact/trunk</developerConnection>
        <url>http://buildmachine/org.example/my-artifact/trunk</url>
    </scm>
    <dependencies>
        <dependency>
            ...
        </dependency>
    </dependencies>

我想:

<project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>org.example</groupId>
    <artifactId>my-artifact</artifactId>
    <dependencies>
        <dependency>
            ...
        </dependency>
    </dependencies>
4

3 回答 3

3

我不知道您的问题的完美解决方案,但有些事情可以做。这些是技巧,但它们可能会有所帮助。
首先,将来自 pom 的私有信息(如 scm、开发人员姓名等)外部化。对于 scm 元数据,它将是:

<scm>
   <connection>${my.scm.connection}</connection>
   <developerConnection>${my.scm.developerConnection}</developerConnection>   
   <url>${my.scm.url}</url>
</scm>

其次,将属性移动到设置文件,将它们放在配置文件中。在设置文件中,您还可以“隐藏”您公司的私有存储库。如果您必须与其他同事共享profiles/settings.xml 文件,请尝试使用全局设置文件运行mvn -gs path_to_global_settings或准备好这些设置的通用Maven 安装。
不幸的是,父 pom 部分必须保持不变。

于 2009-12-04T20:37:34.357 回答
1

据我所知,发布插件对此没有内置支持。想到了两种可能:

选项1:

  • 不要在你的 jar 中包含 pom - 你可以使用jar目标的 'archive' 参数来控制它。<archive><addMavenDescriptor>false</addMavenDescriptor></archive>
  • 编写一个程序来去除您发布的 POM 中不需要的元素。您必须在 release:prepare 和 release:perform 之间执行此操作,这可能仅适用于您的 SCM 支持在创建后修改标签,或者在不同的标签/分支下进行修改,然后 release:perform from那里。

我认为选项 1 很糟糕。

选项 2:

  • 尝试将preparationGoals 参数用于发布插件。如果您可以将 pom 操作编写为 maven 操作,则可以这样做。

我认为选项2更难。

如果这些都不起作用,您可能必须使用 release:stage 之类的东西并手动进行消毒,但您仍然希望从 jar 内容中排除 POM。

于 2009-12-02T05:44:29.530 回答
0

您将为此创建自己的原型并将其发布给公众。然后,您的用户可以检索原型并根据您的原型设置他们自己的项目。

原型是一个非常简单的插件,其中包含一个希望创建的项目原型。

要基于原型创建新项目,需要调用mvn archetype:generate目标,如下所示:

  mvn archetype:generate                              \
  -DarchetypeGroupId=<archetype-groupId>              \
  -DarchetypeArtifactId=<archetype-artifactId>        \ 
  -DarchetypeVersion=<archetype-version>              \
  -DgroupId=<my.groupid>                              \
  -DartifactId=<my-artifactId>
于 2009-11-21T06:43:30.680 回答