在发布时匿名化pom.xml

时间:2009-11-20 09:12:17

标签: maven-2 sanitize pom.xml anonymize

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

有没有办法告诉Maven生成一个已清理的pom.xml,这样可以将公告发布给公众,而不会破坏依赖项等技术相关信息?

SCM URL,开发人员列表以及父pom(仅用于DepMgmt定义和其他元素)的存在都不能与人工制品的用户相关,所以我想我可能是从已发布的pom.xml中删除

存储库管理器(如Archiva)中的pom.xml和打包在artefact的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>

3 个答案:

答案 0 :(得分:3)

我不知道你的问题的完美解决方案,但有些事情可以做。这些都是黑客攻击,但它们可能有所帮助 首先,将来自pom的私人信息外部化(如scm,开发者名称等)。对于scm元数据,它将是:

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

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

答案 1 :(得分:1)

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

选项1:

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

我认为选项1很难吃。

选项2:

  • 尝试将prepareGoals参数用于release插件。如果您可以将pom操作编写为maven操作,那么可能可以这样做。

我认为选项2更难。

如果这些都不起作用,你可能不得不使用release:stage之类的东西并手工进行消毒,但你仍然想要从jar内容中排除POM。

答案 2 :(得分:0)

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

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

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

  mvn archetype:generate                              \
  -DarchetypeGroupId=<archetype-groupId>              \
  -DarchetypeArtifactId=<archetype-artifactId>        \ 
  -DarchetypeVersion=<archetype-version>              \
  -DgroupId=<my.groupid>                              \
  -DartifactId=<my-artifactId>