2010-10-20 87 views
7

我刚刚将一个ant项目翻译成maven,不过由于maven并没有真正处理部署,我在构建中引入了一些antrun。但是,当我尝试执行它时,插件会跳过我的任务。例如,当我运行mvn clean antrun时:运行我得到以下消息:没有定义ant目标 - 跳过。在第二阶段中,我尝试重写部署阶段以执行实际部署,而不是上载到存储库。如何将maven antrun插件绑定到清理阶段

请在下面找到我的pom.xml中的提取物(类型:POM):

  <plugin> 
      <artifactId>maven-antrun-plugin</artifactId> 
      <version>1.6</version> 
      <executions> 
       <execution> 
        <id>clean</id> 
        <configuration> 
         <task> 
          <echo>Cleaning deployed website</echo> 
         </task> 
         <tasks> 
          <delete dir="${deployRoot}/mydir/${env}"/> 
         </tasks> 
        </configuration> 
        <phase>clean</phase> 
        <goals> 
         <goal>run</goal> 
        </goals> 
       </execution> 
       <execution> 
        <id>deployment</id> 
        <configuration> 
         <task> 
          <echo>Deploying website</echo> 
         </task> 
         <tasks> 
          <echo>Copying website artifact to deployment </echo> 
          <mkdir dir="${deployRoot}/mydir/${env}" /> 
          <unzip 
           src="${project.basedir}/target/${env}.${project.version}.zip" 
           dest="${deployRoot}/mydir/${env}" /> 
          <chmod perm="ugo+rx"> 
           <fileset dir="${deployRoot}/mydir/${env}/web-exploded/bin"> 
            <include name="**/*.sh" /> 
            <include name="**/*.bat" /> 
           </fileset> 
          </chmod> 
         </tasks> 
        </configuration> 
        <phase>deploy</phase> 
        <goals> 
         <goal>run</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 

回答

11

在你pom.xml,你定义两种类型处决:

  • 一个链接到clean阶段
  • 其中一个链接到deploy阶段。注意,顺便说一下,对于Maven的,deploy意味着部署我的(基于web)应用程序的服务器上上的远程仓库部署神器。请阅读deploy plugin information了解更多详情。

所以,如果你运行的命令MVN部署,当Maven的生命周期到达deploy阶段,它将运行插件执行(第二个在pom.xml)。

然而,在你的情况,你是运行默认的Maven生命周期,为您的命令是MVN antrun:运行(这里我不考虑clean的目标,因为它没有为这个问题没关系)。这可以在Maven中翻译为运行antrun插件,目标运行为。问题在于,您没有定义任何配置(其中包含Ant任务),调用您的Ant插件的直接

所以两个解决方案:

  • 绑定第二次执行到install阶段,然后运行mvn clean install,而不是mvn antrun:run。请注意,在这种情况下,您将运行整个Maven生命周期(即编译,测试和打包)。
  • 创建此插件的配置,即而不是与任何执行相关。从XML角度来看,只需将第二个<configuration>块添加(或移动)为<plugin>定义的子项即可。

如果你选择了第二种方案,你将有一个pom.xml像这样的:

 <plugin> 
     <artifactId>maven-antrun-plugin</artifactId> 
     <version>1.6</version> 
     <!-- For cleaning --> 
     <executions> 
      <execution> 
       <id>clean</id> 
       <configuration> 
        <task> 
         <echo>Cleaning deployed website</echo> 
        </task> 
        <tasks> 
         <delete dir="${deployRoot}/mydir/${env}"/> 
        </tasks> 
       </configuration> 
       <phase>clean</phase> 
       <goals> 
        <goal>run</goal> 
       </goals> 
      </execution> 
     </executions> 
     <configuration> 
      <tasks> 
       <echo>Copying website artifact to deployment </echo> 
       ... 
      </tasks> 
     </configuration> 
    </plugin> 
相关问题