NCNC

WTGGT,TTGG

用户操作
[即时聊天] [发私信] [加为好友]
张忠良ID:sunjavaduke
93471次访问,排名983好友0人,关注者2
优于别人,并不高贵,真正的高贵是优于昨天的自己
这个世界上最伟大的事情并不是已经取得的成就,而是前进的方向
sunjavaduke的文章
原创 10 篇
翻译 43 篇
转载 1 篇
评论 0 篇
sunjavaduke的公告
Contact me
最近评论
文章分类
收藏
    相册
    vic
    Favorite
    ASF
    存档
    订阅我的博客
    XML聚合  FeedSky

    翻译 Maven Plugins - Core收藏

    新一篇: Maven Plugins - Package | 旧一篇: Maven Build LifeCycle

     
    本部分内容介绍了Maven核心Plugin。
    本文内容全部翻译自Apache Software Foundation,如有转载,请声明!
    Clean插件
    Clean插件用于移除在构建时产生的文件。
    Clean插件只有一个goal。
    clean:clean 用于移除工程工作空间中在构建时生成的文件。默认情况下,该goal找到并删除project.build.directory,project.build.outputDirectory,project.build.testOutputDirectory和project.reporting.outputDirectory目录中的内容。
     
    可以通过在命令行使用如下的命令运行clean插件:
    mvn clean:clean
    mvn clean
    或者和其他的phase/goals一起运行
    mvn clean package site
    也可以在构建过程中自动的运行clean插件,同时可以指定删除其他的文件(对Maven透明的文件)
    <project>
     [...]
     <build>
        <plugins>
          <plugin>
            <artifactId>maven-clean-plugin</artifactId>
            <executions>
              <execution>
                <id>auto-clean</id>
                <phase>validate</phase>
                <goals>
                  <goal>clean</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
        </plugins>
     </build>
     [...]
    </project>
    <build>
     [...]
     <plugin>
        <artifactId>maven-clean-plugin</artifactId>
        <configuration>
          <filesets>
            <fileset>
              <directory>some/relative/path</directory>
    //equals to ${basedir}/some/relative/path
              <includes>
                <include>**/*.tmp</include>
                <include>**/*.log</include>
              </includes>
              <excludes>
                <exclude>**/important.log</exclude>
                <exclude>**/another-important.log</exclude>
              </excludes>
              <followSymlinks>false</followSymlinks>
            </fileset>
          </filesets>
        </configuration>
     </plugin>
     [...]
    </build>
     
    默认情况下在clean失败时,构建过程也是失败的,如果不希望这样的话,那么可以使用下面的配置来忽略失败:
    <artifactId>maven-clean-plugin</artifactId>
        <configuration>
    <failOnError>false</failOnError>
    ...
    在某些情况下,可能需要跳过clean的过程,可以使用下面的配置来实现:
    <artifactId>maven-clean-plugin</artifactId>
     <configuration>
        <skip>true</skip>
    Compiler插件
    Compiler插件用来编译工程的源代码或者测试源代码。默认的编译器是javac,用来编译Java源代码。默认的source属性设置为1.3,默认的target设置为1.1,和运行Maven时的JDK版本无关。如果需要修改这个默认值的话,可以通过如下方法:
    <project>
     [...]
     <build>
        [...]
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
              <source>1.4</source>
              <target>1.4</target>
            </configuration>
          </plugin>
        </plugins>
        [...]
     </build>
     [...]
    </project>
    除了javac编译器之外,maven还开始支持AspectJ、.NET和C#。
    Compiler插件是Maven1.x中Java插件的Maven2版本。
     
    编译Java源代码
    Compiler插件的goal被绑定到构建周期中各自独立的phases。当需要编译源代码的时候,只需要指定需要执行哪个构建周期,下面是编译源代码的命令:
    mvn compile
    如果要编译测试源代码,那么需要使用
    mvn test-compile
    上述两个命令分别执行compiler:compile和compiler:test-compile命令。
    下面的pom片段演示了如何在pom中配置Compiler插件:
    <project>
     ...
     <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
              <!-- put your configurations here -->
            </configuration>
          </plugin>
        </plugins>
     </build>
     ...
    </project>
    可以使用不同的JDK来编译源代码,只是通过compilerVersion来指定的。同时必须将fork属性设置为true,以便使其工作:
    <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
              <verbose>true</verbose>
              <fork>true</fork>
              <executable><!-- path-to-javac --></executable>
              <compilerVersion>1.3</compilerVersion>
            </configuration>
          </plugin>
    为了避免javac编译器的硬编码,可以使用一个属性来指定javac的路径:
    <executable>${JAVA_1_4_HOME}/bin/javac</executable>
    这样的话,不同的开发人员可以在自己的settings.xml文件中或者系统环境变量中指定${JAVA_1_4_HOME}变量,以便使构建成为可移植的。
    <settings>
     [...]
     <profiles>
        [...]
        <profile>
          <id>compiler</id>
            <properties>
              <JAVA_1_4_HOME>C:\j2sdk1.4.2_09</JAVA_1_4_HOME>
            </properties>
        </profile>
     </profiles>
     [...]
     <activeProfiles>
        <activeProfile>compiler</activeProfile>
     </activeProfiles>
    </settings>
    当使用不同的JDK版本时,可能需要进行自定义Manifest文件的格式。默认的Manifest的格式如下:
    Manifest-Version: 1.0
    Archiver-Version: Plexus Archiver
    Created-By: Apache Maven
    Built-By: ${user.name}
    Build-Jdk: ${java.version}
    可以以通过使用archive配置元素来自定义manifest信息。下面是一些样例的配置选项:
    <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            ...
            <configuration>
              <archive>
                <index>true</index>
                <manifest>
                  <addClasspath>true</addClasspath>
                </manifest>
                <manifestEntries>
                  <mode>development</mode>
                  <url>${pom.url}</url>
                  <key>value</key>
                </manifestEntries>
              </archive>
            </configuration>
            ...
    在编译时可以指定编译器占用的内存的大小,例如下面的pom片段中将初始的内存大小设置为128MB,并将最大的内容使用设置为512MB:
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
              <fork>true</fork>
              <meminitial>128m</meminitial>
              <maxmem>512m</maxmem>
            </configuration>
          </plugin>
        </plugins>
    在编译过程中可以将编译参数插入到构建过程中,例如:
    <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
              <compilerArgument>-verbose -bootclasspath ${java.home}\lib\rt.jar</compilerArgument>
            </configuration>
          </plugin>
    或者使用Map格式的参数:
    <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
              <compilerArguments>
                <verbose />
                <bootclasspath>${java.home}\lib\rt.jar</bootclasspath>
              </compilerArguments>
            </configuration>
          </plugin>
    Deploy插件
    deploy插件最初是在deploy phase中使用,以便将产品添加到远程存储库以便对其他开发人员和项目共享。这通常在集成测试或者释放环境中来完成。同时,deploy还是可以将一个特定的产品(第三方jar文件,例如Sun的非发布的引用实现javax.*)。
    由于存储库不仅仅包含了产品(POMs,metadata,MD5和SHA1哈希文件...),所以发布不仅仅意味着拷贝文件,并且需要确保所有的信息都被正确的更新了。这就是deploy插件的功能。
    在部署时需要以下条件:
    ¨         存储库的信息:位置、传输协议(FTP,SCP,SFTP...)以及用户指定的帐户信息
    ¨         产品的信息:group、artiface、version、packaging、classifier...
    ¨         部署器:执行实际部署功能的方法。这可以作为一个wagon传输(跨平台)实现或者使用系统指定的方法
    信息会通过隐含的POM或者命令行来使用。settings.xml文件也有可能用来获取用户的信息。
     
    deploy插件包含了两个目标:
    deploy:deploy用来自动的安装产品,pom以及由特定项目指定的附加产品。大多数部署相关的信息都是保存在工程的POM中。
    可选参数:
    altDeploymentRepository:指定产品被发布到的存储库,格式为: id::layout::url
    updateReleaseInfo:用来更新产品是否更新的标志,默认为false
    deploy:deploy-file用来安装单个的产品及其pom。
    必要参数和可选参数请参考
    Install插件
    本地存储库是用来存储构建过程所需的所有的产品。默认情况下,本地存储库的路径为用户的主目录(~/.m2/repository),但是可以通过在~/.m2/settings.xml文件中来使用<localRepository>元素来进行自定义配置。
    Install插件在install phase中使用,将产品添加到本地存储库。install插件使用POM中的信息(groupId,artifcaeId,version)来决定将产品安装在本地存储库中的什么位置。
     
    install插件包含了两个goals:
    install:intall用来自动的安装工程的产品(jar,war或者ear)、pom以及任何其他的附属产品(sources,javadoc,etc)。
    这个goal包含了如下的可选参数:
    createChecksum:是否生成checksums,默认为false。
    md5Digester:MD5摘要
    sha1Digester:SHA-1摘要
    updateReleaseInfo:是否更新metadata来将产品发布,默认值为false。
    install:install-file多数用来安装外部生成的产品以及它的pom到本地的存储库。
     
    可以在命令行上运行maven install插件,install:install goal不需要任何的配置,只是需要项目的POM文件和要被安装的产品文件,它在default构建周期的install阶段被执行。
    mvn install
    install:install-file的具体执行参数如下:
    mvn install:install-file -Dfile=your-artifact-1.0.jar \
                             [-DpomFile=your-pom.xml] \
                             [-DgroupId=org.some.group] \
                             [-DartifactId=your-artifact] \
                             [-Dversion=1.0] \
                             [-Dpackaging=jar] \
                             [-Dclassifier=sources] \
                             [-DgeneratePom=true]
                             [-DcreateChecksum=true]
    时尚情况适用于存在自定义的或者指定的POM文件的情况。但是,对于一些第三方的产品,可能没有POM。install插件可以生成一个包含POM元素最小及的POM文件,这些元素包括groupId,artifactId,version,packaging。这些通过使用generatePom参数来实现:
    mvn install:install-file -Dfile=path-to-your-artifact-jar \
                              -DgroupId=your.groupId \
                              -DartifactId=your-artifactId \
                              -Dversion=version \
                              -Dpackaging=jar \
                              -DgeneratePom=true
    Resource插件
    Resources插件用于处理将项目资源拷贝到输出目录。Resources包含两个目标,即主要资源和测试资源。这样就可以将程序源代码的资源和单元测试的资源进行分离。
    Resources产检包含两个目标:
    resources:resources将程序源代码的资源拷贝到输出主目录。
    该目标的必要参数如下:
    outputDirectory、resources
    可选参数如下:
    encoding、filters
    resources:testResources将测试源代码的资源拷贝到测试输出目录。该目标的参数信息和前者相同。
     
    mvn resources:resources,通过执行这个命令,源代码的资源会拷贝到主输出目录。这不会影响到测试代码。这个目标被绑定到process-resources构建阶段。
    mvn resources:testResources,这个goal和之前的类似,将测试代码的资源文件拷贝到测试输出目录。同理,这不会影响程序代码。这个目标被绑定到process-test-resources。
    指定编码格式:可以在读写文件时指定编码方式,例如ASCII,UTF-8、UTF-16。
    <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <configuration>
              ...
              <encoding>UTF-8</encoding>
    指定资源目录:默认情况下,maven会在src/main/resources目录下寻找资源文件:
    Project
    | -- pom.xml
    ` -- src
         ` -- main
            ` -- resources
    可是,所有的资源不一定在src/main/resources目录下,此时需要在pom中指定资源目录:
    <project>
     [...]
     <build>
       [...]
       <resources>
         <resource>
           <directory> [your folder here] </directory>
         </resource>
         <resource>
           <directory> [your another folder here] </directory>
         </resource>
       </resources>
       ......
    过滤:在资源中可能可以包含变量。这些变量使用${...}来表示,这些属性的值可以是系统属性,工程属性,过滤资源文件以及命令行设置。
    例如,在src/main/resources/hello.txt包含如下的内容:
    Hello ${name}
    如果pom如下:
    <project>
     [...]
     <name>My Resources Plugin Practice Project</name>
     [...]
     <build>
        [...]
        <resources>
          [...]
          <resource>
            <directory>src/main/resources</directory>
    这样的话,通过调用mvn resources:resources命令,就会生成一个资源在target/class/hello.txt目录中,包含的内容与之前相同:
    Hello ${name}
    但是,如果添加一个filtering标记到pom,并将其设置为true的话,如下所示:
    [...]
          <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
          </resource>
          [...]
    那么再执行mvn resources:resources命令时,上述的内容就会变成
    Hello My Resources Plugin Practice Project
    这是由于name变量被项目名称所代替。也可以使用命令行的方式设置属性的值:
    mvn resources:resources –Dname=”world”
    不仅仅是预定义的项目变量,也可以指定自己的变量和值,将变量的名字作为标记,将值作为标记的值就可以了,例如:
    <project>
     [...]
     <properties>
        <your.name>world</your.name>
     </properties>
     [...]
    </project>
    但是,如果变量太多,就不适合放在pom中了,此时可以指定一个资源文件,例如:
    <project>
     [...]
     <name>My Resources Plugin Practice Project</name>
     [...]
     <build>
        [...]
        <filters>
          <filter> [a filter property] </filter>
        </filters>
    包含/排除文件和目录:当指定一个资源目录时,可能并不是目录中所有的文件都被使用。因此,可能需要自定包含哪些文件,不包含哪些文件。
    <project>
     [...]
     <name>My Resources Plugin Practice Project</name>
     [...]
     <build>
        [...]
        <resources>
          [...]
          <resource>
            <directory> src/my-resources </directory>
            <includes>
              <include> **/*.txt </include>
            </inclues>
            <excludes>
              <exclude> **/*test*.* </exclude>
            </excludes>
          </resource>
     
    Site插件
    Site插件用于生成项目的站点。生成的站点中包含了项目的发布信息等。
    Site插件包含六个目标:
    site:deploy通过使用scp或者文件协议来生成由<distributionManagement>指定的站点。
    site:attach-descriptor将站点描述符添加到要安装/发布的文件列表中。
    site:site生成站点。
    site:run开始建立站点,处理文档。
    site:stage-deploy将生成的站点发布。
    site:stage:生成站点。
    可以通过使用mvn site命令来执行site构建周期。
    site:deploy目标支持scp和文件协议。为了将生成的站点发布,首先需要指定将站点发布到什么地方。这可以通过distributionManagement来完成:
    <project>
     ...
     <groupId>org.apache.maven.plugins</groupId>
     <artifactId>maven-site-plugin</artifactId>
     <distributionManagement>
        <site>
          <id>maven.apache.org</id>
          <url>scp://maven.apache.org/deploy/path</url>
        </site>
     </distributionManagement>
     ...
    </project>
    然后在项目中执行site:deploy目标。
    但是必须在执行这个目标前已经生成了一个站点。mvn site:deploy
    如果需要生成站点同时发布,那么可以使用mvn site-deploy来完成。
     
    Surefire插件
    Surefire插件主要用于测试阶段,用于执行应用程序的单元测试。它以两种格式生成测试报告:
    纯文本文件(*.txt)
    XML文件(*.xml)
    默认情况下,这些文件生成在${basedir}/target/surefire-reports目录中。
    如果需要使用HTML格式的报告,可以使用Surefire报告插件,这个插件可以生成TEST-*.xml文件(這些文件保存在${basedir}/target/surefire-reports目錄下),并將這些文件使用DOXIA生成Web界面版本的測試結果。具体内容请参考Maven Surefire Report Plugin
    Surefire插件只有一个目标,那就是surefire:test,用于运行应用程序的单体测试。
    该目标的必要参数为:
    basedir:类型为文件,要测试的工程的基准目录。
    classesDirectory:包含生成的类文件的目录。
    testClassesDirectory:包含生成的测试类文件的目录。
    testSourceDirectory:包含测试源代码的目录。
    关于可选参数,请参考:
    可以通过调用test构建阶段来运行Surefire插件。
    mvn test
    可以使用不同的测试框架来进行测试代码。例如
    TestNG
    JUnit(3.8或者4.x)
    POJO
     
    Verifier插件
    对集成测试非常有用,用于检查特定条件是否存在。
    verify:verify目标用于检查是否存在特定的文件和目录。可以使用正则表达式来检查。
    必要的参数:
    basedir:Project base directory (prepended for relative file paths).
    failOnError:Whether the build will fail on verification errors. Default value is true.
    verificationFile:The file containing the verifications to perform.
    使用方法:
    <project>
     [...]
     <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-verifier-plugin</artifactId>
            <configuration>
              <verificationFile>src/test/verifier/verifications-test.xml</verificationFile>
            </configuration>
            <executions>
              <execution>
                <id>main</id>
                <phase>verify</phase>
                <goals>
                  <goal>verify</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
        </plugins>
     </build>
    [...]
    其中检查的文件的样例如下:
    <verifications>
     <files>
        <file>
          <location>src/main/resources/file1.txt</location>//是否存在
        </file>
        <file>
          <location>src/main/resources/file2.txt</location>
          <contains>aaaabbbb</contains>//file2.txt是否包含aaaabbbb
        </file>
        <file>
          <location>src/main/resources/file3.txt</location>
          <exists>false</exists>//是否不存在file3.txt
        </file>
     </files>
    </verifications>

    发表于 @ 2008年05月22日 15:03:28|编辑

    新一篇: Maven Plugins - Package | 旧一篇: Maven Build LifeCycle

    评论:没有评论。

    Csdn Blog version 3.1a
    Copyright © sunjavaduke