【问题标题】:How to keep two maven settings profile for two different projects for different builds?如何为不同构建的两个不同项目保留两个 Maven 设置配置文件?
【发布时间】:2014-10-16 21:54:13
【问题描述】:

有什么方法可以在 settings.xml 文件中使用两个不同的配置文件在不同的服务器上执行两个不同的构建? 例如: 在我的 settings.xml 文件中,我有两个配置文件:

<profile>
      <id>test1</id>
      <properties>
          <liferay.version>6.2.10.9</liferay.version>
          <liferay.maven.plugin.version>6.2.10.6</liferay.maven.plugin.version>
          <liferay.auto.deploy.dir>Server1 Details</liferay.auto.deploy.dir>
          <liferay.app.server.deploy.dir>Server1 Details</liferay.app.server.deploy.dir>
          <liferay.app.server.lib.global.dir>Server1 Details</liferay.app.server.lib.global.dir>
          <liferay.app.server.portal.dir>Server1 Details</liferay.app.server.portal.dir>
      </properties>
</profile>      
<profile>
      <id>test2</id>
      <properties>
          <liferay.version>6.2.10.9</liferay.version>
          <liferay.maven.plugin.version>6.2.10.6</liferay.maven.plugin.version>
          <liferay.auto.deploy.dir>Server2 Details</liferay.auto.deploy.dir>
          <liferay.app.server.deploy.dir>Server2 Details</liferay.app.server.deploy.dir>
          <liferay.app.server.lib.global.dir>Server2 Details</liferay.app.server.lib.global.dir>
          <liferay.app.server.portal.dir>Server2 Details</liferay.app.server.portal.dir>
      </properties>
      </properties>
</profile>  
<activeProfiles>
      <activeProfile>test1</activeProfile>
      <activeProfile>test2</activeProfile>
</activeProfiles>

现在,我想要一个项目的“test1”配置文件和另一个项目的“test2”,我希望从 settings.xml 配置文件的属性中获取我的 pom.xml 构建属性。

如果我将两个配置文件都保存在“activeProfiles”中,我的两个项目都会选择“test2”详细信息并构建和部署到错误的服务器。

在 pom.xml 中,我正在使用 build>plugins>这样的配置:

      <configuration>
                <autoDeployDir>${liferay.auto.deploy.dir}</autoDeployDir>
                <appServerDeployDir>${liferay.app.server.deploy.dir}</appServerDeployDir>
                <appServerLibGlobalDir>${liferay.app.server.lib.global.dir}  </appServerLibGlobalDir>
                <appServerPortalDir>${liferay.app.server.portal.dir}</appServerPortalDir>
                <liferayVersion>${liferay.version}</liferayVersion>
                <pluginName>portlet-name</pluginName>
                <pluginType>portlet</pluginType>
      </configuration>

请帮忙!

提前致谢!

【问题讨论】:

  • Re “我想要一个项目的'test1'配置文件和另一个项目的'test2'”。你有一个或两个 Maven 项目,即 POM 吗?
  • 是的,两个带有配置属性的 diff pom.xml。
  • 如果您有两个 POM,为什么还要摆弄配置文件?将适当的属性写入每个 POM,从而完全摆脱配置文件。在KISS principle 的最佳意义上。还要记住 POM 上的“M”代表什么。如果您的模型需要特定的服务器来使用它,那么这是该模型的要求并且属于那里。

标签: java maven liferay


【解决方案1】:

我通过在我的 settings.xml 中创建两个不同的配置文件并保持为空来解决了这个问题。 因为,我使用的是 eclipse,所以我从 eclipse Maven > Select Profile. 中为项目选择了差异配置文件。 这样我就可以选择为我的项目选择任何配置文件并部署到选定的配置文件服务器。

我这样做的原因:在协作团队环境中,我们只需要在部署之前共享 settings.xml 文件并选择配置文件。无需每次都更改 pom.xml。

如果有人有更好的解决方案,请发布。学习新东西总是好的。

【讨论】:

    【解决方案2】:

    难怪test2 被选中。 中的test1test2 都始终处于活动状态,无论(重复,因此毫无意义)POM 或命令行激活。

    您很可能在两者中的任何一个中配置了相同的设置,尽管 POM 和 settings.xmls 是声明性的,即它们中没有程序流,但在 Maven 运行时解析它们时有一个流。那么test2就是后者,覆盖之前test1.的设置

    根据Introduction to Build Profiles, Deactivating a profile“从 Maven 2.0.10 开始,可以使用命令行禁用一个或多个配置文件,方法是在其标识符前加上字符'!'或'-'"。

    【讨论】:

    • 嗨 Geri,我在 pom.xml 中使用 build>plugins>configuration,这些配置在 settings.xml 中提到。所以,现在要维护两个不同的配置文件,我应该在哪里指定服务器详细信息。
    • @PanwarS87 您是否点击了该指南的链接? 1. 在 cmd 行上停用一个或另一个:mvn -P !test[1|2]。 2. 彻底删除&lt;activeProfiles&gt;,在命令行激活一个或另一个:mvn -P test[1|2]
    • 很抱歉再次问这个问题,但我需要在 pom.xml 中维护配置文件吗?如何从 Eclipse 运行“clean install -P !test2”?
    • @PanwarS87 这与该线程无关。提出一个新问题并用 EclipseRun Configuration 标记它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-30
    • 2017-01-19
    • 2010-12-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多