2011-06-29 3 views
4

Когда я бег mvn deploy в моем проекте, который имеет <packaging>war</packaging> я получаю ошибку:заменить стандартный Maven цели жизненного цикла

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.5:deploy (default-deploy) on project store-service-impl: Deployment failed: repository element was not specified in the POM inside distributionManagement element or in -DaltDeploymentRepository=id::layout::url parameter

Вероятно, что по умолчанию deploy:deploy цели связана с фазой deploy жизненного цикла. Другими словами, Maven попытается запустить сгенерированный артефакт (файл .war в этом случае) в удаленный репозиторий, когда будет выполняться фаза жизненного цикла deploy.

В моем случае я хочу развернуть войну на удаленный экземпляр Tomcat, а не на удаленный репозиторий Maven. Я добавил следующее в pom.xml

 <plugin> 
      <groupId>org.codehaus.cargo</groupId> 
      <artifactId>cargo-maven2-plugin</artifactId> 
      <version>1.1.1</version> 
      <configuration> 
       <container> 
        <containerId>tomcat6x</containerId> 
        <type>remote</type> 
       </container> 
       <!-- 
       <executions> 
        <execution> 
         <id>deploy-tomcat</id> 
         <phase>deploy</phase> 
         <goals> 
          <goal>deploy</goal> 
         </goals> 
        </execution> 
       </executions> 
       --> 
       <configuration> 
        <type>runtime</type> 
        <properties> 
         <cargo.remote.uri>http://10.60.60.60:8080/manager</cargo.remote.uri> 
         <cargo.remote.username>jack</cargo.remote.username> 
         <cargo.remote.password>secret</cargo.remote.password> 
        </properties> 
       </configuration> 
       <deployer> 
        <type>remote</type> 
       </deployer> 
      </configuration> 
     </plugin> 

Это успешно разворачивает .war, когда я бегу mvn cargo:deploy. Однако, если я свяжу эту цель с фазой deploy жизненного цикла Maven, раскомментируя элемент <executions>, я получаю вышеупомянутую ошибку.

Похоже, что cargo:deploy цели была добавлена ​​к целям, связанным с deploy фазы, но я хочу заменить на deploy:deploy целях, привязанные к фазе deploy жизненного цикла (по умолчанию) с cargo:deploy целью, является это возможно?

ответ

3

Вы должны связать груз с pre-integration-test вместо deploy - тогда ваши отказоустойчивые тесты могут работать против развернутого военного файла во время фазы integration-test. Вы проводите тесты, используя mvn verify.

+0

У меня нет интеграционных тестов, поэтому это не относится ко мне. Если я привяжу груз к фазе «pre-integration-test», тогда .war будет развернут, когда кто-то запускает 'mvn install'. Я только хочу, чтобы он был развернут, когда кто-то запускает «mvn deploy». –

+5

Не обижайтесь, но IMHO вы неправильно используете фазу «развернуть». Он имеет то же имя, что и вы, но это не то, что вы хотите. Он предназначен для развертывания в репозитории maven. 'mvn install' устанавливает файл войны в репозиторий maven локального компьютера, как я уверен, вы знаете. Я бы расследовал использование чего-то типа Jenkins для развертывания на удаленном сервере при успешной сборке. О, и получить некоторые интеграционные тесты ;-) – artbristol

+0

точка, занятая фазой 'deploy' - спасибо! –

1

Вы можете попробовать отключить развёртывать плагин перед конфигурированием груза:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-deploy-plugin</artifactId> 
    <version>2.5</version> 
    <configuration> 
     <skip>true</skip> 
    </configuration> 
</plugin> 
1

Вы можете отключить цели Deploy по умолчанию с Maven-плагин-развертывания на выполнение ид по умолчанию в развертывании. Старая нить, я ставлю ее здесь на случай кого-то.

<plugin> 
    <artifactId>maven-deploy-plugin</artifactId> 
    <version>2.7</version> 
    <executions> 
     <execution> 
      <id>default-deploy</id> 
      <phase>none</phase> 
     </execution> 
    </executions> 
</plugin> 
Смежные вопросы