【问题标题】:How to activate a specific profile, other than default one defined in settings.xml, in maven projects?如何在 Maven 项目中激活特定配置文件,而不是在 settings.xml 中定义的默认配置文件?
【发布时间】:2015-07-24 15:18:33
【问题描述】:

我的settings.xml 文件中有两个配置文件(gsi-reposmy-repos),gsi-repos 是默认的活动配置文件。

如何在我的一些 maven 项目中激活配置文件 my-repos?这可以在我的项目pom.xml 中完成吗?

settings.xml

<profiles>
        <profile>
            <id>gsi-repos</id>
            <repositories>
                <repository>
                    <id>cp-releases</id>
                    <name>CP Releases</name>
                    <url>http://org.release-server.com/nexus/content/repositories/cp-releases</url>
                    <releases>
                        <enabled>true</enabled>
                    </releases>
                    <snapshots>
                        <enabled>false</enabled>
                    </snapshots>
                </repository>
            </repositories>
        </profile>
        <profile>
            <id>my-repos</id>
            <repositories>
                <repository>
                    <id>my-releases</id>
                    <name>My Releases</name>
                    <url>http://my.release-server.com/nexus/content/repositories/releases/</url>
                    <releases>
                        <enabled>true</enabled>
                    </releases>
                    <snapshots>
                        <enabled>false</enabled>
                    </snapshots>
                </repository>
            </repositories>
        </profile>
</profiles>

<activeProfiles>
        <activeProfile>gsi-repos</activeProfile>
</activeProfiles>       

【问题讨论】:

  • mvn -Pprofile ... 但这看起来不对。通常您应该只有一个发布存储库...最好在 nexus 中配置一个公共组,而不是不同的存储库。
  • 您是否通过 CI 服务器(Jenkins、TeamCity、Bamboo)发布?因此,您可以创建不同的 settings.xml 文件并根据构建选择使用哪一个。另一种方法是将发布 url 配置为属性,项目将在其 distributionManagement 部分中使用它们的财产权。
  • @khmarbaise - 我同意应该有一个单一的发布存储库。我使用两个不同的发布存储库的原因是,一个是我公司的,另一个是我的个人仓库,我用它来发布我的个人项目。我还在我的另一台 Windows 机器上专门安装了 Nexus 存储库管理器,它与我公司的 Nexus 存储库管理器不同。我不想将我的个人项目发布和发布到我公司的存储库中。
  • @wemu - 不,我不使用 CI 服务器。您能否提供一些代码 sn-p 以及如何做到这一点?

标签: maven


【解决方案1】:

为此使用配置文件的替代方法是:

如果您想区分发布在您的关系中的最终位置,您可以在 settings.xml 文件中提供不同的属性。这些属性只需要在您的 CI 服务器或实际执行 mvn deploy 的机器上设置

settings.xml:

[...]
<profiles>
  <profile>
    <id>nexus-profile</id>
    <activation>
      <activeByDefault>true</activeByDefault>
    </activation>
  <properties>
    <repo.releases.url>https://nexus/content/repositories/releases/</repo.releases.url>
    <repo.snapshots.url>https://nexus/content/repositories/snapshots</repo.snapshots.url>
    <repo.lib-releases.url>https://nexus/content/repositories/libs/</repo.lib-releases.url>
  </properties>
 </profile>

[...]

所以在你的 pom.xml(或匹配的父 pom)中:

  [...]
  <distributionManagement>
    <repository>
        <id>releases</id>
        <name>Managed Release Candidate Repository</name>
        <url>${repo.releases.url}</url>
      </repository>
      <snapshotRepository>
        <id>snapshots</id>
        <name>Managed Snapshots Repository</name>
        <url>${repo.snapshots.url}</url>
      </snapshotRepository>
  </distributionManagement>
  [...]

将其工件部署到 libs 存储库的项目只会对 url 使用不同的属性。

您可以将其放入 projet-parent.pom 和 libs-parent.pom - 因此任何使用其中之一作为其父级的 pom 根本不必处理 distributionManagement。

distributionManagement 可以添加到配置文件中,并根据某些激活(例如,如果某个文件存在)来激活它们:http://maven.apache.org/guides/introduction/introduction-to-profiles.html 但我建议不要在 maven 中过度使用配置文件。

【讨论】:

    猜你喜欢
    • 2016-05-07
    • 2019-05-17
    • 1970-01-01
    • 2012-07-22
    • 2017-02-26
    • 2015-08-19
    • 2012-04-16
    • 2022-10-19
    • 2013-09-24
    相关资源
    最近更新 更多