项目结构
Maven 项目结构
就像
<?xml version="1.0" encoding="UTF-8"?>
<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.wx.mvn</groupId>
<artifactId>hello-world</artifactId>
<version>1.0-SNAPSHOT</version>
<name>Maven Hello World Project</name>
</project>
文件结构
- 代码的第一行是
XML 头,指定了该xml 文档的版本和编码方式。紧接着是project 元素,project 是所有pom.xml 的根元素,它还声明了一些POM 相关的命名空间及xsd 元素,虽然这些属性不是必须的,但使用这些属性能够让第三方工具( 如IDE 中的XML 编辑器) 帮助我们快速编辑POM 。
- 根元素下的第一个子元素
modelVersion 指定了当前POM 模型的版本,对于Maven 2 及Maven 3 来说,它只能是4.0.0 。这段代码中最重要的是groupId ,artifactId 和version 三行。这三个元素定义了一个项目基本的坐标,在Maven 的世界,任何的jar 、pom 或者war 都是以基于这些基本的坐标进行区分的。
groupId 定义了项目属于哪个组,这个组往往和项目所在的组织或公司存在关联,譬如你在googlecode 上建立了一个名为myapp 的项目,那么groupId 就应该是com.googlecode.myapp ,如果你的公司是mycom ,有一个项目为myapp ,那么groupId 就应该是com.mycom.myapp 。
artifactId 定义了当前Maven 项目在组中唯一的ID ,我们为这个Hello World 项目定义artifactId 为hello-world ,本书其他章节代码会被分配其他的artifactId 。而在前面的groupId 为com.googlecode.myapp 的例子中,你可能会为不同的子项目( 模块) 分配artifactId ,如:myapp-util、myapp-domain、myapp-web 等等。
-
version 指定了Hello World 项目当前的版本——1.0-SNAPSHOT。SNAPSHOT 意为快照,说明该项目还处于开发中,是不稳定的版本。随着项目的发展,version 会不断更新,如升级为1.0 、1.1-SNAPSHOT、1.1、2.0 等等。 -
最后一个
name 元素声明了一个对于用户更为友好的项目名称,虽然这不是必须的,但我还是推荐为每个POM 声明name ,以方便信息交流。没有任何实际的Java 代码,我们就能够定义一个Maven 项目的POM ,这体现了Maven 的一大优点,它能让项目对象模型最大程度地与实际代码相独立,我们可以称之为解耦,或者正交性,这在很大程度上避免了Java 代码和POM 代码的相互影响。比如当项目需要升级版本时,只需要修改POM ,而不需要更改Java 代码;而在POM 稳定之后,日常的Java 代码开发工作基本不涉及POM 的修改。
变量替换
在
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<spring.version>1.2.6</spring.version>
<developer.organization><![CDATA[xy公司]]></developer.organization>
</properties>
以上内容就改成了
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
也可以使用 maven-properties 插件来支持外部变量
目录结构
项目主代码和测试代码不同,项目的主代码会被打包到最终的构件中src/main/java
目录,我们遵循com/wx/mvn/helloworld/HelloWorld.java
,其内容如下
package com.wx.mvn.helloworld;
public class HelloWorld {
public String sayHello() {
return "Hello Maven";
}
public static void main(String[] args) {
System.out.print(new HelloWorld().sayHello());
}
}
关于该mvn clean compile
即可。
仓库配置

下面介绍一些
maven-metadata.xml
maven-metadata.xml.md5
maven-metadata.xml.sha1
<?xml version="1.0" encoding="UTF-8"?>
<metadata modelVersion="1.1.0">
<groupId>io.github.hengyunabc</groupId>
<artifactId>mybatis-ehcache-spring</artifactId>
<version>0.0.1-SNAPSHOT</version>
<versioning>
<snapshot>
<timestamp>20150804.095005</timestamp>
<buildNumber>1</buildNumber>
</snapshot>
<lastUpdated>20150804095005</lastUpdated>
</versioning>
</metadata>
其中
<repositories>
<repository>
<id>hengyunabc-maven-repo</id>
<url>file:/home/hengyunabc/code/maven-repo/repository/</url>
</repository>
</repositories>