`
Josh_Persistence
  • 浏览: 1661972 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类

Maven强大的插件在项目中的具体运用 - 不断更新中

阅读更多

Maven中强大的Plugin 机制

我们都知道Maven本质上是一个插件框架,它的核心并不执行任何具体的构建任务,所有这些任务都交给插件来完成,例如编译源代码是由maven- compiler-plugin完成的。进一步说,每个任务对应了一个插件目标(goal),每个插件会有一个或者多个目标,例如maven- compiler-plugin的compile目标用来编译位于src/main/java/目录下的主源码,testCompile目标用来编译位于src/test/java/目录下的测试源码。

 

用户可以通过两种方式调用Maven插件目标。

1) 将插件目标与生命周期阶段(lifecycle phase)绑定.

     这样用户在命令行只是输入生命周期阶段而已,例如Maven默认将maven-compiler-plugin的compile目标与 compile生命周期阶段绑定,因此命令mvn compile实际上是先定位到compile这一生命周期阶段,然后再根据绑定关系调用maven-compiler-plugin的compile目标。

2) 直接在命令行指定要执行的插件目标:

例如mvn archetype:generate 就表示调用maven-archetype-plugin的generate目标,这种带冒号的调用方式与生命周期无关。

 

认识上述Maven插件的基本概念能帮助你理解Maven的工作机制,不过要想更高效率地使用Maven,了解一些常用的插件还是很有必要的,这可以帮助 你避免一不小心重新发明轮子。多年来Maven社区积累了大量的经验,并随之形成了一个成熟的插件生态圈。Maven官方有两个插件列表,第一个列表的 GroupId为org.apache.maven.plugins,这里的插件最为成熟,具体地址为:http://maven.apache.org/plugins/index.html。第二个列表的GroupId为org.codehaus.mojo,这里的插件没有那么核心,但也有不少十分有用,其地址为:http://mojo.codehaus.org/plugins.html

 

言归正传:如下插件是项目中经常用到的:

 

1. maven-compliler-plugin 用于编译一个与当前你正在使用的JVM版本不同的project。

比如,如果你想打开JVM1.4的assertions(-source1.4)并且想编译与JVM1.4相兼容的类,可以用下面的plugin

<project>
  [...]
  <build>
    [...]
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.1</version>
        <configuration>
          <source>1.4</source>
          <target>1.4</target>
        </configuration>
      </plugin>
    </plugins>
    [...]
  </build>
  [...]
</project>

注:设置target这个选项不能够保证你的代码就一定能够在指定的版本上运行。可能会有一些没有在计划中的未知的API是在你所指定的JRE版本后的JRE中才提供的,这回导致你的code在运行时出现linkage的错误。为了避免这种错误,可以使用Animal Sniffer Maven Plugin(http://mojo.codehaus.org/animal-sniffer-maven-plugin/)来检查你的code是否使用了这些不在计划中的API,也可以配置编译器的根路径保证其和你目标的JRE路径一致。

 

2.maven-surefire-plugin 用于指定进行Unit test的Class(http://maven.apache.org/plugins/maven-surefire-plugin/

可能是由于历史的原因,Maven 2/3中用于执行测试的插件不是maven-test-plugin,而是maven-surefire-plugin。其实大部分时间内,只要你的测试 类遵循通用的命令约定(以Test结尾、以TestCase结尾、或者以Test开头),就几乎不用知晓该插件的存在。然而在当你想要跳过测试、排除某些 测试类、或者使用一些TestNG特性的时候,了解maven-surefire-plugin的一些配置选项就很有用了。例如 mvn test -Dtest=FooTest 这样一条命令的效果是仅运行FooTest测试类,这是通过控制maven-surefire-plugin的test参数实现的。如:

<plugin>

  <groupId>org.apache.maven.plugins</groupId>

  <artifactId>maven-surefire-plugin</artifactId>

        <version>2.4.3</version>

  <configuration>  

  <classesDirectory>${project.build.directory}/generated-classes/emma/classes</classesDirectory>

<forkMode>perTest</forkMode>

<useSystemClassLoader>false</useSystemClassLoader>

  </configuration>

 </plugin> 

 

3. maven-antrun-plugin让用户在maven中运行ant任务(http://maven.apache.org/plugins/maven-antrun-plugin/

maven-antrun-plugin能让用户在Maven项目中运行Ant任务。用户可以直接在该插件的配置以Ant的方式编写Target,然后交 给该插件的run目标去执行。在一些由Ant往Maven迁移的项目中,该插件尤其有用。此外当你发现需要编写一些自定义程度很高的任务,同时又觉得 Maven不够灵活时,也可以以Ant的方式实现之。maven-antrun-plugin的run目标通常与生命周期绑定运行。

如:<plugin>

           <artifactId>maven-antrun-plugin</artifactId>

           <executions>

             <execution>

               <phase>test</phase>

               <goals>

                 <goal>run</goal>

               </goals>

               <configuration>

                 <tasks>

                   <delete file="${project.build.outputDirectory}/cms_core_config.properties"/>

                   <copy file="src/main/resources/${config.lookup.name}"

                         tofile="${project.build.outputDirectory}/cms_core_config.properties"/>

...

                 </tasks>

               </configuration>

             </execution>

           </executions>

         </plugin>

 

 

在Antrun插件中使用多个execution:

<build>  
    <plugins>  
        <plugin>  
            <artifactId>maven-antrun-plugin</artifactId>  
            <executions>  
                <execution>  
                    <id>package</id>  
                    <phase>package</phase>  
                    <goals>  
                        <goal>run</goal>  
                    </goals>  
                    <configuration>  
                        <tasks>  
                            <echo message="make ..."/>  
                            <exec dir="src/main/c" executable="make" failonerror="true" />  
                        </tasks>  
                    </configuration>  
                </execution>  
                <execution>  
                    <id>clean</id>  
                    <phase>clean</phase>  
                    <goals>  
                        <goal>run</goal>  
                    </goals>  
                    <configuration>  
                        <tasks>  
                            <echo message="make clean ..."/>  
                            <exec dir="src/main/c" executable="make" failonerror="true">  
                                <arg line="clean"/>  
                            </exec>  
                        </tasks>  
                    </configuration>  
                </execution>  
            </executions>  
        </plugin>  
    </plugins>  
</build>  
...  
 

代码中定义了两个execution节点,分别执行原来Makefile中定义的make和make clean。这里可以将tasks节点定义成任意自己想要运行的ant任务;

* 在第一个execution节点下,把phase定义成package,goal定义成run,是为了使在运行"mvn package"的时候自动执行第一个execution节点下的ant任务;

* 在第二个execution节点下,把phase定义成clean,goal定义成run,是为了使在运行"mvn clean"的时候自动执行第二个execution节点下的ant任务。

 

4. maven-archetype-plugin(http://maven.apache.org/archetype/maven-archetype-plugin/)

 

Archtype指项目的骨架,Maven初学者最开始执行的Maven命令可能就是mvn archetype:generate,这实际上就是让maven-archetype-plugin生成一个很简单的项目骨架,帮助开发者快速上手。可能也有人看到一些文档写了mvn archetype:create, 但实际上create目标已经被弃用了,取而代之的是generate目标,该目标使用交互式的方式提示用户输入必要的信息以创建项目,体验更好。 maven-archetype-plugin还有一些其他目标帮助用户自己定义项目原型,例如你由一个产品需要交付给很多客户进行二次开发,你就可以为 他们提供一个Archtype,帮助他们快速上手。

分享到:
评论

相关推荐

    apache-maven-3.8.3(含windows和linux版本).zip

    Maven通过一组插件来实现具体任务,这些插件可以在项目的生命周期的各个阶段被调用。 版本3.8.3是Apache Maven的一个更新版本,相较于早期版本,它带来了更多的改进和新特性。这个版本的Maven适用于不同的操作系统...

    apache-maven-3.8.4(含windows和linux版本).zip

    标签中提到了“java windows linux maven”,这表明Maven是一个跨平台、跨语言的工具,尽管它主要用于Java项目的管理,但其设计理念和方法同样可以被其他编程语言所借鉴和应用。 随着软件开发的日益复杂,自动化...

    apache-maven-3.6.1

    Apache Maven 3.6.1 是一款流行的软件项目管理和构建自动化工具,尤其在Java项目开发中占据重要地位。它由Apache软件基金会负责维护,主要功能包括项目对象模型(POM)管理、依赖管理系统、构建生命周期管理和多模块...

    apache-maven-3.9.9(含windows和linux版本).zip

    几乎每一个Java开发者在进行项目开发时,都会使用到Maven来管理项目依赖和生命周期,它有效地解决了项目构建过程中遇到的依赖管理和自动化构建问题。 Apache Maven是Apache Software Foundation软件基金会的一个...

    Wowza插件开发和Maven的集成示例项目

    在本项目中,我们将探讨如何使用Maven构建和管理Wowza插件的开发过程。Maven是一个流行的Java项目管理和集成工具,它帮助开发者自动化构建、依赖管理和项目信息管理。 首先,让我们深入了解Wowza插件的开发。Wowza...

    apache-maven-3.2.3

    5. **插件系统**:Maven 使用插件来执行具体任务,如编译源代码、运行测试、打包应用等。插件通过goal(目标)来执行特定功能,可以在POM中配置。 6. **继承与聚合**:通过POM的`&lt;parent&gt;`和`&lt;modules&gt;`标签,可以...

    apache-maven-3.1.0

    Apache Maven 是一个强大的项目管理和构建工具,主要用于Java应用程序的开发。在Java生态系统中,Maven通过简化项目的构建、依赖管理以及文档生成等过程,极大地提高了开发效率。标题"apache-maven-3.1.0"指的是...

    apache-maven-3.5.4-bin.tar

    Apache Maven 是一个强大的Java项目管理和综合工具,它简化了构建过程,通过标准化项目结构和自动化构建生命周期来管理依赖关系。Maven 3.5.4是该工具的一个稳定版本,提供了许多改进和优化,旨在提高开发效率和协作...

    apache-maven-3.9.9.7z

    Maven在企业级应用开发中极为常见,原因在于它极大地简化了多模块项目中的依赖关系和生命周期管理。开发人员无需手动配置类路径、下载依赖或者管理不同阶段的构建配置。Maven通过一个声明式的配置文件(pom.xml),...

    maven-3.5.2,maven安装包

    在大型项目中,Maven 通过其强大的生命周期管理和插件系统,帮助团队维持高效的开发流程和一致的构建环境。 随着现代软件开发的发展,Maven 也不断地在演进,提供了更好的性能、更多的特性以及更好的用户体验。...

    Maven-3.2.5, 64位

    在实际开发中,我们还可以通过Maven的插件系统扩展其功能,如使用`maven-javadoc-plugin`生成API文档,`maven-source-plugin`打包源代码,以及`maven-site-plugin`生成项目站点等。 对于Maven-3.2.5这个特定版本,...

    maven3.6.3.zip

    Apache Maven 是一个强大的项目管理和构建工具,广泛应用于Java开发领域。Maven通过提供一个标准化的项目对象模型(Project Object Model,POM)以及一套插件,使得构建、依赖管理和文档生成变得简单易行。在本文中...

    maven+springside 开发入门

    【标题】"maven+...在学习过程中,不断实践是关键,通过创建自己的项目并应用所学知识,你会逐渐掌握这两个强大的工具。同时,遇到问题时,查阅官方文档、参与社区讨论和阅读相关博客文章都能加速你的学习进度。

    maven配置文档

    - **Maven插件和目标(Plugins and Goals)**:Maven插件由一组目标组成,每个目标代表了一个具体的构建动作。 - **Maven生命周期(Lifecycle)**:Maven定义了一系列的构建阶段,按照一定的顺序执行。例如,`validate`...

    maven_demo03-javaEE框架项目资源

    在深入探讨maven_demo03-javaEE框架项目资源的内容...通过这个项目资源包,开发者不仅可以学习到如何使用Maven管理和构建JavaEE项目,还可以深入了解JavaEE框架在实际应用开发中的运用,从而提升自身的JavaEE开发能力。

    Java项目管理和构建工具Maven的详细配置与使用指南

    20. Maven的未来展望:随着软件开发技术的不断进步,Maven也在持续更新和发展。Maven社区不断推出新特性,优化构建过程和提高用户体验。Maven的未来发展方向将继续是更高效、更智能、更易于使用的构建工具。

    Maven 项目管理工具

    随着Gradle等新型构建工具的崛起,Maven也在不断改进以应对这些挑战,例如增加对多模块项目的支持和提供更灵活的配置方式。 综上所述,Maven是一个功能强大的项目管理工具,通过POM、依赖管理、构建生命周期、插件...

    maven3.0.3

    ** Maven详解:构建Java项目的利器 ** ...随着开源社区的不断发展,Maven已成为许多大型项目和企业级应用的标准构建工具。无论你是个人开发者还是团队,掌握Maven都能让你的项目管理更加得心应手。

Global site tag (gtag.js) - Google Analytics