maven设置自定义属性

maven设置自定义属性,maven,build,pom.xml,Maven,Build,Pom.xml,我对Maven完全陌生。我正在尝试建立一个新的项目,这样就不需要20页长的word文档和截图来建立它。我在Mac和PC上有开发人员,所以我需要能够自定义catalina.home目录,因为我不能只强加一个标准位置。我想我应该在~/.m2/settings.xml文件中使用以下内容: <profile> <id>my-site-dev</id> <activation> <activeByDefault>true</

我对Maven完全陌生。我正在尝试建立一个新的项目,这样就不需要20页长的word文档和截图来建立它。我在Mac和PC上有开发人员,所以我需要能够自定义catalina.home目录,因为我不能只强加一个标准位置。我想我应该在~/.m2/settings.xml文件中使用以下内容:

<profile>
  <id>my-site-dev</id>
  <activation>
    <activeByDefault>true</activeByDefault>
  </activation>
  <properties>
    <catalina.home>/path/to/apache-tomcat</catalina.home>
  </properties>
</profile>

我的网站开发
似乎表明我试图完成的是一个坏主意。为了在pom.xml中只引用${catalina.home},实现这一点的官方方法是什么


现在我已经用一个id声明了我的概要文件,如果我的pom.xml不能加载概要文件“my site dev”,我的构建会失败吗?如果可能的话,我想把它从settings.xml中去掉。我不想无缘无故地干扰他们的全局设置,我希望尽可能多地保持其独立性。

您可以在pom中使用基于操作系统激活的配置文件

<profiles>
  <profile>
    <activation>
      <os>
        ...

...
你在做什么,需要卡塔琳娜回家

如果您正在使用maven部署到应用服务器,那么您已经超出了“一致、可移植的构建”规则集,也超出了maven的主要用例/最佳实践


并不是说你不应该这样做——因为这很方便。只需确保将构建项目与部署项目分开。

不要默认使用
active
,因为它将隐藏所有其他配置文件:

以下是您应该使用的:

<profiles>
    <profile>
        <id>path-to-catalina.home-linux</id>
        <activation>
            <os>
                <family>linux</family>
            </os>
        </activation>
        <properties>
            <catalina.home>...</catalina.home>
        </properties>
    </profile>
    <profile>
        <id>path-to-catalina.home-mac</id>
        <activation>
            <os>
                <family>mac</family>
            </os>
        </activation>
        <properties>
            <catalina.home>...</catalina.home>
        </properties>
    </profile>
    <profile>
        <id>path-to-catalina.home-windows</id>
        <activation>
            <os>
                <family>windows</family>
            </os>
        </activation>
        <properties>
            <catalina.home>...</catalina.home>           
           </properties>
     </profile>

path-to-catalina.home-linux
linux
...
path-to-catalina.home-mac
雨衣
...
path-to-catalina.home-windows
窗户
...           

如果我在一致可移植构建规则集之外,那么为什么会有默认的mvn部署目标?我希望开发人员能够键入mvn deploy,运行所有测试,编译和构建war,并在本地部署它,这样他们就可以运行UAT(如果有更好的方法,我也愿意这么做)。mvn deploy意味着“部署构建的工件(通常是.war文件)”到maven存储库,以便其他项目可以依赖它,而无需构建它。它与应用程序部署无关。还有,你看了吗?谢谢,现在我明白发生了什么,这差不多完美了!