2016-07-07 3 views
1

Это <build> тег от моего старого POM, который работал:Maven POM мульти среды profiels

<build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>2.0</version> 
       <configuration> 
        <source>1.7</source> 
        <target>1.7</target> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-eclipse-plugin</artifactId> 
       <version>2.9</version> 
       <configuration> 
        <wtpversion>2.0</wtpversion> 
        <downloadSources>true</downloadSources> 
        <downloadJavadocs>true</downloadJavadocs> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.axis2</groupId> 
       <artifactId>axis2-wsdl2code-maven-plugin</artifactId> 
       <version>1.6.2</version> 
      </plugin> 
     </plugins> 
     <finalName>test</finalName> 
    </build> 

Теперь я хочу иметь 3 различные файлы api.properties для каждого этапа: прод, Dev, тест. Итак, я пошел дальше и пошел за учебниками <profile> для maven. Это то, что я в конечном итоге с для только прод и испытательной стадии (полное удаление старого <build> тег):

<profiles> 
     <profile> 
      <id>test</id> 
      <build> 
       <plugins> 
        <plugin> 
         <groupId>org.apache.maven.plugins</groupId> 
         <artifactId>maven-compiler-plugin</artifactId> 
         <version>2.0</version> 
         <configuration> 
          <source>1.7</source> 
          <target>1.7</target> 
          <tasks> 
           <delete file="${project.build.outputDirectory}/api.prod.properties" /> 
           <delete file="${project.build.outputDirectory}/api.dev.properties" /> 
           <copy file="src/main/resources/api.test.properties" 
            tofile="${project.build.outputDirectory}/api.properties" /> 
          </tasks> 
         </configuration> 
        </plugin> 
        <plugin> 
         <groupId>org.apache.maven.plugins</groupId> 
         <artifactId>maven-eclipse-plugin</artifactId> 
         <version>2.9</version> 
         <configuration> 
          <wtpversion>2.0</wtpversion> 
          <downloadSources>true</downloadSources> 
          <downloadJavadocs>true</downloadJavadocs> 
         </configuration> 
        </plugin> 
        <plugin> 
         <groupId>org.apache.axis2</groupId> 
         <artifactId>axis2-wsdl2code-maven-plugin</artifactId> 
         <version>1.6.2</version> 
        </plugin> 
       </plugins> 
       <finalName>test</finalName> 
      </build> 
     </profile> 
     <profile> 
      <id>prod</id> 
      <build> 
       <plugins> 
        <plugin> 
         <groupId>org.apache.maven.plugins</groupId> 
         <artifactId>maven-compiler-plugin</artifactId> 
         <version>2.0</version> 
         <configuration> 
          <source>1.7</source> 
          <target>1.7</target> 
          <tasks> 
           <delete file="${project.build.outputDirectory}/api.test.properties" /> 
           <delete file="${project.build.outputDirectory}/api.dev.properties" /> 
           <copy file="src/main/resources/api.prod.properties" 
            tofile="${project.build.outputDirectory}/api.properties" /> 
          </tasks> 
         </configuration> 
        </plugin> 
        <plugin> 
         <groupId>org.apache.maven.plugins</groupId> 
         <artifactId>maven-eclipse-plugin</artifactId> 
         <version>2.9</version> 
         <configuration> 
          <wtpversion>2.0</wtpversion> 
          <downloadSources>true</downloadSources> 
          <downloadJavadocs>true</downloadJavadocs> 
         </configuration> 
        </plugin> 
        <plugin> 
         <groupId>org.apache.axis2</groupId> 
         <artifactId>axis2-wsdl2code-maven-plugin</artifactId> 
         <version>1.6.2</version> 
        </plugin> 
       </plugins> 
       <finalName>test</finalName> 
      </build> 
     </profile> 
    </profiles> 

Это на самом деле не работает, однако. Будет генерировать только один .war, а не 3 войны, которые я хочу (test-prod.war, test-dev.war, ...), а сгенерированная война будет содержать все 3 файла .properties, а не тот, который у него должен быть. Почему и что я могу сделать, чтобы исправить это? Я довольно новичок в maven ... Спасибо!

+0

как вы запустите Maven сборки? При выборе всех трех профилей? Запуск их один раз для каждого профиля должен предоставить вам три разных артефакта. – Abaddon666

+0

@ Abaddon666: Я просто запускаю maven install в своем затмении, как обычно ... Как мне запустить его «по-другому»? – Shiuyin

+0

Я обычно запускаю maven из командной строки, которая тогда выглядела бы, например. 'mvn clean install -Ptest' для запуска тестового профиля. В противном случае вам нужно будет указать, как профили могут быть выбраны для плагина maven, который вы используете – Abaddon666

ответ

0

использование

mvn clean compile -P prod,dev,test 

также лучше иметь сборки тег вне вашего профиля тега и ссылаться на свойства профиля внутри ваших плагинов. например вы можете указать папку для свойств в своем профиле, а затем ссылаться на это свойство в другом месте.

<profile> 
     <id>dev</id> 
     <properties> 
      <properties.dir>YOUR_DEV_DIR</properties.dir> 
     </properties> 
    </profile> 

, то вы можете ссылаться на ${properties.dir} нигде