maven学习一(HelloWorld工程)

maven是一个出色的java工程依赖管理的工具,刚刚开始学习用maven建立一个HelloWorld工程。

maven安装

$ wget http://mirrors.cnnic.cn/apache/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz
$ tar -zxvf apache-maven-3.3.9-bin.tar.gz
$ sudo mv apache-maven-3.3.9 /usr/local/maven
$ export PATH=$PATH:/usr/local/maven/bin
$ mvn -version

配置maven源

maven和Linux下的yum是很像的,在解析依赖的时候会去配置的源里搜索包,然后下载下来保存到本地仓库,下次其它工程解析到同一个包依赖时就会从本地仓库里取。maven的配置文件默认是在

$INSTALL_DIR/conf/settings.xml

conf/settings.xml是maven的全局配置,每个用户还可以配置自定义的settings.xml,路径是

~/.m2/settings.xml

settings.xml具体每项配置的含义可以查看:maven配置文件settings.xml。其中有一项配置是

localRepository就是本地仓库路径,jar包都会下载到这个目录下
<localRepository>${user.home}/.m2/repository</localRepository>

另外,国内使用maven可以用oschina的源:http://maven.oschina.net/static/xml/settings.xml

新建HelloWorld工程

maven有几个概念

groupId: 项目的组织机构,也是java包的目录结构,一般都是域名的倒序,比如 com.firefoxbug.www
artifactId: 项目实际的名字,比如log4j
packaging: 包的类型,比如jar
version: 项目版本号,比如1.0-SNAPSHOT

再引入maven坐标的概念

${groupId}:${artifactId}:${packaging}:${version} 

通过maven坐标可以唯一确定一个项目,比如 com.firefoxbug.www:HelloWorld:jar:1.0-SNAPSHOT。

下面开始建立一个HelloWorld的maven工程

$ groupId=com.firefoxbug.www
$ artifactId=HelloWorld
$ version=1.0-SNAPSHOT
$ mvn archetype:generate -DgroupId=${groupId} -DartifactId=${artifactId} -Dpackage=${groupId} -Dversion=${version}

maven会自动建立一些列的目录,结构如下

HelloWorld/
├── pom.xml
└── src
    ├── main
    │   └── java
    │       └── com
    │           └── firefoxbug
    │               └── www
    │                   └── App.java
    └── test
        └── java
            └── com
                └── firefoxbug
                    └── www
                        └── AppTest.java

pom.xml

每个工程都会有pom.xml用来描述这个工程所需要的外部依赖,包括具体版本的jar包,maven自动会去解析pom.xml文件然后下载包到本地仓库,被依赖的包自身也有pom.xml描述文件,maven就会递归解析。pom.xml大概格式如下,后面我们再慢慢分析。

$ cd helloworld && vim pom.xml
<project >
  <groupId>com.firefoxbug.helloworld</groupId>
  <artifactId>helloworld</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>helloworld</name>

  <dependencies>
    <dependency>
    </dependency>
  </dependencies>
</project>

编译、运行HelloWorld

maven工具可以支持以下功能

1. mvn compile 编译源代码
2. mvn test-compile 编译测试代码
3. mvn test 运行测试
5. mvn package 打包,根据pom.xml打成war或jar
    如果pom.xml中设置 war,则此命令相当于mvn war:war
    如果pom.xml中设置 jar,则此命令相当于mvn jar:jar
6. mvn -Dtest package   
    打包但不编译test例子:mvn package -Dmaven.test.skip=true
    打包、编译但是不运行test例子: mvn package -DskipTests
7. mvn install  在本地Repository中安装jar
8. mvn clean    清除产生的项目
9. mvn eclipse:eclipse 生成eclipse项目
10.mvn idea:idea    生成idea项目
11.mvn eclipse:clean    清除eclipse的一些系统设置

package会进行打包,包括编译、测试

$ mvn package

如果编译没有错误,就会在根目录下产生一个target目录,并且生成相应的jar包,解压出来后就是工程目录

$ cd target
$ jar -xvf  HelloWorld-1.0-SNAPSHOT.jar
  created: META-INF/
 inflated: META-INF/MANIFEST.MF
  created: com/
  created: com/firefoxbug/
  created: com/firefoxbug/www/
 inflated: com/firefoxbug/www/App.class
 ...

运行HellWorld

$ java -cp HelloWorld-1.0-SNAPSHOT.jar com.firefoxbug.www.App
Hello World!

标签:none