前面手工创建plugin的maven项目的时候,提到要注意几点:
1.packaging值位maven-plugin而不是jar,war
2.dependency要用到maven-plugin-api
3.还需要使用maven-plugin-plugin或者注释里面添加特殊标记来创建descriptor
那么,懂了这些基本方法后,看看maven-archetype-plugin为我们提供创建plugin项目提供便利。
用下面的命令:
mvn archetype:create -DgroupId=com.freebird -DartifactId=plugin-example1 -DarchetypeArtifactId=maven-archetype-mojo项目目录结构如下:
chenshu@chenshu-beijing:~/plugin-example1$ tree . ├── pom.xml └── src └── main └── java └── com └── freebird └── MyMojo.java 5 directories, 2 files
连类都为我创建好了,看看代码:
package com.freebird; /* * Copyright 2001-2005 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import org.apache.maven.plugin.AbstractMojo; import org.apache.maven.plugin.MojoExecutionException; import java.io.File; import java.io.FileWriter; import java.io.IOException; /** * Goal which touches a timestamp file. * * @goal touch * * @phase process-sources */ public class MyMojo extends AbstractMojo { /** * Location of the file. * @parameter expression="${project.build.directory}" * @required */ private File outputDirectory; public void execute() throws MojoExecutionException { File f = outputDirectory; if ( !f.exists() ) { f.mkdirs(); } File touch = new File( f, "touch.txt" ); FileWriter w = null; try { w = new FileWriter( touch ); w.write( "touch.txt" ); } catch ( IOException e ) { throw new MojoExecutionException( "Error creating file " + touch, e ); } finally { if ( w != null ) { try { w.close(); } catch ( IOException e ) { // ignore } } } } }
<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>com.freebird</groupId> <artifactId>plugin-example1</artifactId> <packaging>maven-plugin</packaging> <version>1.0-SNAPSHOT</version> <name>plugin-example1 Maven Mojo</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>org.apache.maven</groupId> <artifactId>maven-plugin-api</artifactId> <version>2.0</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> </project>