2015-12-10 94 views
2

這是我使用Maven的構建配置文件的第一天。我有以下文件模式:Maven設置和POM中的相同配置文件名稱

  1. 的pom.xml
  2. Maven的設置(%USER_HOME%/平米/ settings.xml中)

出於好奇我在這兩個文件中創建一個配置文件使用相同的id(local_deploy),唯一的區別在於一個屬性(例如tomcat.pwd)。

檔案在POM看起來象下面這樣:

<profile> 
     <id>local_deploy</id> 
     <activation> 
      <activeByDefault>false</activeByDefault> 
     </activation> 
     <properties> 
      <tomcat.host>localhost</tomcat.host> 
      <tomcat.port>8080</tomcat.port> 
      <tomcat.url>http://${tomcat.host}:${tomcat.port}/manager/text</tomcat.url> 
      <tomcat.user>admin</tomcat.user> 
      <tomcat.pwd>admin</tomcat.pwd> 
     </properties> 
    </profile> 

檔案Maven中設置看起來像如下:

<profile> 
    <id>local_deploy</id> 
    <properties> 
     <tomcat.host>localhost</tomcat.host> 
     <tomcat.port>8080</tomcat.port> 
     <tomcat.url>http://${tomcat.host}:${tomcat.port}/manager/text</tomcat.url> 
     <tomcat.user>admin</tomcat.user> 
     <tomcat.pwd>wrongpwd</tomcat.pwd> 
    </properties> 
    </profile> 

請注意,在Maven中設置的個人資料不是<activeProfiles>上市。

當我嘗試使用安裝我的應用程序下面的命令

mvn clean install -P local_deploy help:active-profiles 

我的應用程序被部署以下輸出在控制檯上:

The following profiles are active: 
local_deploy (source: external) 
local_deploy (source: <my groupId>:<my artifactId><version>) 

我經歷this文檔和它說,

Take note that profiles in the settings.xml takes higher priority than profiles in the POM 

所以,我假設我的部署應該由於Maven設置中的密碼不正確而失敗。我在這裏錯過了什麼?

+0

您使用的是哪個版本的maven 3? –

+0

apache-maven-3.3.9 –

+0

我在maven 3.1.1和3.3.9上試過,實際上設置配置文件總是覆蓋樣本pom中具有相同名稱的配置文件的屬性。所以文件是正確的,你有沒有進一步瞭解你所報告的行爲? –

回答

2

下面是一個簡單的pom我用:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.sample</groupId> 
    <artifactId>profiles-sample</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-antrun-plugin</artifactId> 
       <version>1.5</version> 
       <executions> 
        <execution> 
         <id>print-hello</id> 
         <phase>test</phase> 
         <goals> 
          <goal>run</goal> 
         </goals> 
         <configuration> 
          <target> 
           <property name="msg" value="${hello}" /> 
           <property name="msg2" value="${hello2}" /> 
           <echo message="hello from build: ${msg}, ${msg2}" /> 
          </target> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 

    <profiles> 
     <profile> 
      <id>p2</id> 
      <properties> 
       <hello>from-pom</hello> 
       <hello2>from-pom-again</hello2> 
      </properties> 
     </profile> 
    </profiles> 
</project> 

在我的設置定義:

<profile> 
    <id>p2</id> 
    <properties> 
     <hello>from-settings</hello> 
    </properties> 
</profile> 

所以,注:兩個配置文件名稱相同,對POM和設置,定義相同hello財產。但是,POM中的那個定義了一個附加屬性,hello2

然後運行:

mvn test -Pp2 help:active-profiles 

我作爲構建輸出的一部分:

[INFO] --- maven-antrun-plugin:1.5:run (print-hello) @ profiles-sample --- 
[INFO] Executing tasks 

main: 
    [echo] hello from build: from-settings, from-pom-again 
[INFO] Executed tasks 
[INFO]                   
[INFO] ------------------------------------------------------------------------ 
[INFO] Building profiles-sample 0.0.1-SNAPSHOT 
[INFO] ------------------------------------------------------------------------ 
[INFO] 
[INFO] --- maven-help-plugin:2.2:active-profiles (default-cli) @ profiles-sample --- 
[INFO] 
Active Profiles for Project 'com.sample:profiles-sample:jar:0.0.1-SNAPSHOT': 

The following profiles are active: 

- p2 (source: external) 
- p2 (source: com.sample:profiles-sample:0.0.1-SNAPSHOT) 

[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD SUCCESS 
[INFO] ------------------------------------------------------------------------ 

所以,從Maven的幫助插件實際上我們知道,這兩個配置文件是活性成分,這就是真實的,因爲作爲Antrun的一部分,我們獲得了兩個屬性(來自設置配置文件的hello和來自pom配置文件的hello2)。
因此,這兩個配置文件同時處於活動狀態,它們的屬性被合併(因爲hello共享相同的名稱),設置中的屬性優先於來自POM的屬性,然後POM的附加屬性得到正確使用。

因此,我無法重現您提到的場景。我會建議仔細檢查設置和POM並添加一個額外的屬性來玩。

相關問題