maven怎么配置插件
㈠ 如何在eclipse中配置maven插件
配置maven工程。从官网下载maven工具,然后解压到磁盘某个目录下即可。在进行安装配置maven工具的时候,首先就需要对maven安装目录下有个config文件夹,在文件夹下有settings.xml文件。settings里面就是配置maven工程的一些本地仓库地址(项目使用的某些jar下载并且安装到本机中),远程仓库(如果本机没有需要的jar,则从远程获取。)的配置等信息。
㈡ 如何编写一个Maven插件
基础
当maven内置的功能不能满足需求的时候怎么办,那就只能给它写插件了。 (话说回来,给maven扩展只能写一个很完整的插件,而不能是一个简单的script,真的是太笨重了)
网络上很多maven的文章,但基本很少谈及如何给它写插件,即使你搜索maven plugin,也只是给你返回一堆如何使用maven插件的文章。希望这边文章能给一些maven使用者带来帮助。
我在这里先假设你已经懂得使用maven,我不会贴出完整的pom.xml文件
首先,你需要创建一个maven项目,插件是一种特殊的maven项目 然后修改pom.xml,将packaging改为maven-plugin
<packaging>maven-plugin</packaging>
通过properties定义maven的版本
<properties>
<maven.version>2.2.1</maven.version>
</properties>
maven3已经出了很久,并且兼容maven2,因此我们团队内部都是统一使用maven3,但是我这里编写插件使用的是maven2,可以同时在maven2和maven3下使用,不过其实这个原因并不重要,真正的原因是因为maven3的代码实在太烂了,最初的时候我用maven3的api lib来写,发现里面很多代码根本没有注释,而且很多代码已经废弃,但是并没有明确说明究竟用什么方法代替。最后我使用了maven2中被maven3废弃的api来完成我的功能,跑的挺好的,就是有时可能会有一些使用准备废弃的api的提醒而已。
接着添加依赖
<dependencies>
<dependency>
<groupid>org.apache.maven</groupid>
<artifactid>maven-plugin-api</artifactid>
<version>${maven.version}</version>
</dependency>
<dependency>
<groupid>org.apache.maven</groupid>
<artifactid>maven-core</artifactid>
<version>${maven.version}</version>
</dependency>
</dependencies>
然后开始创建Mojo类,maven插件里面每一个具体的功能都是一个Mojo 比如说eclipse:clean和eclipse:eclipse就是两个Mojo
/**
*@goalhelloWorld
*/
{
publicvoidexecute()throwsMojoExecutionException
{
getLog().info("Hello,world!");
}
}
首先继承AbstractMojo,并且实现execute()方法,这个就是每次调用进入的地方 然后需要在类的javadoc上定义,这是一个annotation出来之前常用的定义方法(或许未来maven会将它改成annotation,那就能提供编译校验和IDE校验)。我们必须定义@goal,代表运行目标,简单来说就是eclipse:clean中的clean Mojo写在哪个package底下都是可以的
这样,我们就完成了一个简单的maven plugin,然后我们需要一个简单的测试来确定他正确运行 先通过maven install将它安装到本地仓库
然后打开任意maven的项目(比如说我们原来已经在用maven的项目),在pom.xml增加一个plugin
<build>
<plugins>
<plugin>
<groupid>xxx</groupid>
<artifactid>xxx</artifactid>
<version>xxx</version>
<executions>
<execution>
<phase>compile</phase>
<goals>
<goal>helloWorld</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
需要留意的是phase部分,我们将这个plugin绑定到compile这个周期 然后我们运行mvn compile,就能成功看见Hello, world!输出 (当然你也可以直接通过命令行运行,需要带上完整的groupId和artifactId才能调用)
注入
Mojo是一个很简单的Java Bean模式的类,你会发现Mojo所继承的AbstractMojo里面之后非常少的方法。那我们需要在Mojo.execute里面获取当前运行中的上下文如何处理呢?答案是注入,就是跟spring ioc差不多的注入方式。
常用的注入主要有两种,第一种是xml配置中的额外设置 比如说我们有这么一个plugin的配置
<plugin>
<artifactid>maven-eclipse-plugin</artifactid>
<configuration>
<downloadsources>true</downloadsources>
</configuration>
</plugin>
所有写在configuration里面的属性都可以注入到Mojo中,比如说以下代码
/**
*@parameter
*/
privatebooleandownloadSources;
就可以通过downloadSources变量获得配置中的值 值得注意的是,这里是不用生成完整的JavaBean模式的get/set的,并且private是有效的
javadoc里面还可以加入其他属性,比如说
/**
*@parameterdefault-value="true"
*@readonly
*/
privatebooleandownloadSources;
就是默认为true,并且不能通过配置修改(当然我们这里肯定不会有这样的需求) 更多的javadoc可以参看官方文档中的说明
第二种注入的数据就是上下文,跟HttpServlet.getServletContext这种写法不一样,如果我们需要Mojo运行期的上下文,也是通过注入获得的
/**
*@parameterexpression="${project}"
*@readonly
*/
privateMavenProjectproject;
/**
*@component
*@readonly
*/
;
例如这里我们就能获得ArtifactFactory和MavenProject 需要注意的是这里可能有两种方法,第一种跟xml配置获得的方法差不多,通过expression指定名字 实际上,你在xml里面,也可以通过${project}获得相应的东西进行一些简单的操作(当然xml里面只能文本描述,这里是一个类)
另外一种就是使用@component这个标注,可以获得一些基本的组件实例。
测试
写完一个插件之后,我们就需要对他进行测试 如果我们用人工测试的话,将会非常麻烦,因为maven插件本身的发布流程就非常复杂 你需要编译打包你的maven插件,然后安装到本地库(或远程私库中),然后写一个sample project,再运行,看一下是否正确 当然你也可以用单元测试来解决一些问题,但是单元测试比较难保证插件最终正确,而且maven插件很经常是跟文件打交道
这里我们就需要对maven插件进行自动化的集成测试 maven的生命周期是包含集成测试的,默认是没有绑定任何功能。不过如果你google一下,会找到一些maven进行集成测试的例子,大致就是启动jetty,然后通过http访问验证,再关闭jetty
我们这里使用的是maven-invoker-plugin,它就是用于maven插件的集成测试
先在pom.xml中加入
<build>
<plugins>
<plugin>
<artifactid>maven-invoker-plugin</artifactid>
<configuration>
<cloneprojectsto>${project.build.directory}/it</cloneprojectsto>
</configuration>
<executions>
<execution>
<id>integration-test</id>
<goals>
<goal>install</goal>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
cloneProjectsTo是先将测试案例拷贝出来再运行 execution段的设定是把maven-invoker-plugin的两个goal绑定到integration-test上 integration-test这个生命周期会在mvn install之前调用
集成测试的内容放在 src/it 目录下,每新建一个目录代表一个独立的测试,里面放一个完整的maven项目,当然你在这个项目里面需要引入自己编写的maven插件并且运行 另外还需要一个postbuild.groovy文件,放在测试案例的根目录,这个脚本的用处是检查运行后的maven项目是否达到自己要的效果。很明显,看名字就知道用groovy来写,一般我们会检查一下,是否产生了某某文件等等来判定,如果不正确的话抛出异常
然后我们在maven插件目录运行mvn integration-test就能进行集成测试了
㈢ 如何在Eclipse里安装Maven插件
1. maven3 安装:
安装 Maven 之前要求先确定你的 JDK 已经安装配置完成。Maven是 Apache 下的一个项目,目前最新版本是 3.0.4,我用的也是这个。
首先去官网下载 Maven:http://www.apache.org/dyn/closer.cgi/maven/binaries/apache-maven-3.0.4-bin.tar.gz
下载完成之后将其解压,我将解压后的文件夹重命名成 maven,并将它放在 D:Server 目录下,即 maven 最终的路径是:D:Servermaven
2.配置 maven 环境变量:
系统变量:MAVEN_HOME= D:Servermaven
用户变量:path = %MAVEN_HOME%in
相信大家都有配过环境变量的,详细步骤就不说了,对着把属性名和属性值配上的OK了。
打开 cmd,在里面敲:mvn -version查看是否安装成功。
修改 maven 仓库存放位置:
找到 maven 下的 conf 下的 settings.xml 配置文件,我的是在 D:Servermavenconfsettings.xml
maven 的仓库默认是放在本地用户的临时文件夹下面的 .m2 文件夹下的 repository 下,我的是在 C:Usersadmcnm.m2
epository 目录下,
现在我们来修改将它指定到我们自己的路径下,我现在要将仓库指定到 D:RepositoriesMaven 目录下,只需要将上面注销的本地仓库打开,
然后把相应的路径值写到里面去就行了:
3.在 eclipse 中安装 maven 插件。
在线安装eclipse插件::Help --> Install New Software,然后输入 HTTP 地址来安装(http://download.eclipse.org
),可以在此链接中找相对应的版本。
检查 eclipse 的 maven 插件是否安装成功:Window --> Preferences