实践 Maven 2:您的第一个 Maven 2 项目
在第一个实践的例子里,您将看到如何用最小的努力使用 Maven 2 构建简单项目。Maven 2 内置的关于 Java 项目的知识消除了其他构建工具也许必须要经历的冗长的配置过程。
该例使用了一个处理数值操作的类。这个主体类的源代码(叫做 NumOps
)如清单 4 所示。
package com.ibm.devworks; import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class NumOps { private List <Operation> ops = new ArrayList <Operation>(); public NumOps() { ops.add( new AddOps()); } public Operation getOp(int i) { Operation retval; if (i > ops.size()) { retval = null; } else { retval = (Operation) ops.get(i); } return retval; } public int size() { return ops.size(); } public static void main( String[] args ) { NumOps nop = new NumOps(); for (int i=0; i < nop.size(); i++) { System.out.println( "2 " + nop.getOp(i).getDesc() + " 1 is " + nop.getOp(i).op(2,1) ); } } } |
NumOps
类管理一个能够在两个整数上执行数值操作的对象集。main 方法创建一个 NumOps
实例,然后调用由 NumOps
管理的每个对象,同时分别调用它的 getDesc()
方法和 op()
方法。由 NumOps
管理的所有对象都实现了在 Operation.java 中定义的 Operation
接口,接口代码如清单 5 所示:
package com.ibm.devworks; public interface Operation { int op(int a, int b); String getDesc(); } |
在这个初始的例子里定义的惟一操作是一个 AddOps
类,如清单 6 所示:
package com.ibm.devworks; public class AddOps implements Operation { public int op(int a, int b) { return a+b; } public String getDesc() { return "plus"; } } |
执行 NumOps
类时,会打印出下列输出:
2 plus 1 is 3 |
要创建能用 Maven 构建的简单 Java 项目所需的一切,可以使用 Archetype 插件,它是 Maven 2 中的标准插件。不同于构建阶段插件,Archetype 在 Maven 项目构建生命周期之外运行,用于创建 Maven 项目。在您想要包含 NumOps
项目的目录中执行下列命令(将所有命令敲在一行):
mvn archetype:create -DarchetypeGroupId=org.apache.maven.archetypes -DgroupId=com.ibm.devworks -DartifactId=NumOps |
该命令为 Archetype 插件提供您模块的坐标:com.ibm.devworks/NumOps/1.0-SNAPSHOT
。在此情况下,不需要指定版本,因为 Archetype 插件常默认为 1.0-SNAPSHOT
。此命令为项目创建了一个起始的 pom.xml 文件,也创建了规范的 Maven 2 目录结构。您将在本教程源代码下载处的 example1 目录下找到该代码(参见 下载)。
该输出应该与清单 7 类似:
清单 7. 使用 Maven Archetype 创建 NumOps 项目
[INFO] Scanning for projects... [INFO] Searching repository for plugin with prefix: 'archetype'. [INFO] ------------------------------------------------------------------------- --- [INFO] Building Maven Default Project [INFO] task-segment: [archetype:create] (aggregator-style) [INFO] ------------------------------------------------------------------------- --- [INFO] Setting property: classpath.resource.loader.class => 'org.codehaus.plexus ... [INFO] [archetype:create] [INFO] Defaulting package to group ID: com.ibm.devworks [INFO] ------------------------------------------------------------------------- --- [INFO] Using following parameters for creating Archetype: maven-archetype-quicks tart:RELEASE [INFO] ------------------------------------------------------------------------- --- [INFO] Parameter: groupId, Value: com.ibm.devworks [INFO] Parameter: packageName, Value: com.ibm.devworks [INFO] Parameter: basedir, Value: C:\temp\maven [INFO] Parameter: package, Value: com.ibm.devworks [INFO] Parameter: version, Value: 1.0-SNAPSHOT [INFO] Parameter: artifactId, Value: NumOps [INFO] ********************* End of debug info from resources from generated POM *********************** [INFO] Archetype created in dir: C:\temp\maven\NumOps [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESSFUL [INFO] ------------------------------------------------------------------------ [INFO] Total time: 1 second [INFO] Finished at: Sat Dec 02 22:04:02 EST 2006 [INFO] Final Memory: 4M/8M [INFO] ------------------------------------------------------------------------ |
Archetype 插件创建了一个目录树、一个 pom.xml 文件和一个占位符 App.java 应用程序文件。它也为单元测试源码创建了一棵目录树,还创建了一个占位符 AppTest.java 单元测试文件。这个项目已经准备就绪。图 6 显示了该 Archetype 插件创建的目录和文件。
您只需将 NumOps.java、Operation.java 和 AddOps.java 文件移到 App.java 的位置,并移除 App.java。在下一部分中,将做出一些改变来定制生成的 pom.xm。