maven 命令执行周期

        maven打印的命令:

mvn -Dtest -DfailIfNoTests=false -e package

 

       我们用maven打war包的时候,打包阶段将会创建一个war文件。但是,在它之前的目标做什么呢,像compiler:compilesurefire:test?在Maven经过它生命周期中package之前的阶段的时候,这些目标被运行了;Maven执行一个阶段的时候,它首先会有序的执行前面的所有阶段,到命令行指定的那个阶段为止。每个阶段对应了零个或者多个目标。我们没有进行任何插件配置或者定制,所以这个例子绑定了一组标准插件的目标到默认的生命周期。当Maven经过以package为结尾的默认生命周期的时候,下面的目标按顺序被执行:

resources:resources

Resources插件的resources目标绑定到了resources 阶段。这个目标复制src/main/resources下的所有资源和其它任何配置的资源目录,到输出目录。

compiler:compile

Compiler插件的compile目标绑定到了compile 阶段。这个目标编译src/main/java下的所有源代码和其他任何配置的资源目录,到输出目录。

resources:testResources

Resources插件的testResources目标绑定到了test-resources 阶段。这个目标复制src/test/resources下的所有资源和其它任何的配置的测试资源目录,到测试输出目录。

compiler:testCompile

Compiler插件的testCompile目标绑定到了test-compile 阶段。这个目标编译src/test/java下的测试用例和其它任何的配置的测试资源目录,到测试输出目录。

surefire:test

Surefire插件的test目标绑定到了test 阶段。这个目标运行所有的测试并且创建那些捕捉详细测试结果的输出文件。默认情况下,如果有测试失败,这个目标会终止。

jar:jar

Jar插件的jar目标绑定到了package 阶段。这个目标把输出目录打包成JAR文件。

总结得来说,当我们运行mvn package,Maven运行到打包为止的所有阶段,在Maven沿着生命周期一步步向前的过程中,它运行绑定在每个阶段上的所有目标。你也可以像下面这样显式的指定一系列插件目标,以得到同样的结果:

mvn resources:resources \
    compiler:compile \
    resources:testResources \
    compiler:testCompile \
    surefire:test \
    jar:jar

运行package阶段能很好的跟踪一个特定的构建中包含的所有目标,它也允许每个项目使用Maven来遵循一组定义明确的标准。而这个生命周期能让开发人员从一个Maven项目跳到另外一个Maven项目,而不用知道太多每个项目构建的细节。如果你能够构建一个Maven项目,那么你就能构建所有的Maven项目。

 

一个常用的pom文件:

 

<?xml version="1.0" encoding="UTF-8"?>
<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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>boss</groupId>
  <artifactId>boss</artifactId>
  <packaging>war</packaging>
  <version>0.1</version>
  <description></description>
 
  <repositories>
    <repository>
      <id>scmserver-releases</id>
      <name>scmserver-releases</name>
      <url>http://192.168.***.***:8080/artifactory/repo</url>
    </repository>
  </repositories>
  <properties>
   <java.version>1.6</java.version>
   <junit.version>3.8.2</junit.version>
   <log4j.version>1.2.14</log4j.version>
  </properties>
 
  <pluginRepositories>
    <pluginRepository>
      <id>scmserver-releases</id>
      <name>scmserver-releases</name>
      <url>http://192.168.***.***:8080/artifactory/repo</url>
    </pluginRepository>
  </pluginRepositories>
   <!--这个地方比较重要,资源文件分布在不同的文件夹下面,非默认目录-->
  <build>
   <finalName>boss</finalName>   
   <sourceDirectory>src/main/java</sourceDirectory>
   <resources>
    <resource>
     <directory>src/main/java</directory>
     <includes>
      <include>**/*.xml</include>
     </includes>
    </resource>
    <resource>
     <directory>src/main/resources</directory>
    </resource>
   </resources>
   <!-- 指定java源文件编译的版本以及编码格式 -->
   <plugins> 
     <plugin> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <configuration> 
         <source>${java.version}</source> 
         <target>${java.version}</target>
         <encoding>UTF-8</encoding> 
       </configuration> 
     </plugin>
   </plugins> 
  </build>
  <dependencies>
 <dependency>
   <groupId>org.apache.struts</groupId>
   <artifactId>struts2-config-browser-plugin</artifactId>
   <version>${struts.version}</version>
   <scope>test</scope>
 </dependency>
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>${log4j.version}</version>
    </dependency>

  </dependencies>
</project>

你可能感兴趣的:(apache,maven,log4j,struts,JUnit)