maven

简介

maven是一个基于POM(Project Object Model)的项目管理工具,可以类比c/c++中的make, Java中的ant。因为在学校一般做的项目都比较小,所以很少有机会能用到这些项目管理工具,但是到公司这些项目管理工具用到的是很多的。

quick-start

创建第一个maven项目

通过command-tool创建

mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false -X
其中-X选项打开调试信息
可能会发现该命令阻塞在generating project in batch mode. 通过debug信息发现试图下载http://repo.maven.apache.org/maven2/archetype-catalog.xml,可以通过wget http://repo.maven.apache.org/maven2/archetype-catalog.xml手动下载该文件,并添加到.m2\repository\org\apache\maven\archetype\archetype-catalog\2.2下面,然后添加-DarchetypeCatalog=local变成读取本地catalog.xml文件。
创建项目后可以发现maven项目结构图如下:
maven项目结构图

通过eclipse创建

安装maven插件,New->Maven Project,然后填写groupId, artifactId等信息

编译和运行maven项目

mvn 提供了phase和goal来表示要通过mvn实现的操作。
其中phase表示build整个阶段中的某一步,可以类比c中的预处理->汇编->编译->链接->加载->运行。默认的phase有package, install, deploy。每个phase又有许多sub phases。指定一个phase则该phase之前的phase也将全部执行。
mvn package是将maven项目打包(jar包,war包等)。之前的validate, compile等phase也将运行。
goal表示要通过mvn做的事请,比如package, build等,可以类比make中的target, ant中的task。phase也可以看做一个goal。
goal还可以通过各种maven的plugin来实现。这也是maven真正强大的地方。比如说apache-jetty-plugin实现了与jetty相关的goal,比如jetty:run。一个maven plugin可以看做goal的集合,服务于特定项目,如jboss的maven plugin。
mvn package将maven项目打包,会发现在target目录下出现了许多文件,其中有一个my-app-1-SNAPSHOT.jar就是打包之后的结果。
通过java -cp target/my-app-1-SNAPSHOT.jar com.mycompany.app.my_app.App运行程序。
mvn clean将清除target中由build产生的文件。可以类比make clean

Maven Getting Started Guide

如何创建JAR并且安装到local repository

mvn package
mvn install
这样会将生成的jar包安装到~/.m2/repository的本地仓库中去,这样下次就可以在dependencies中使用该jar包了。
maven在查找依赖时首先会到local repository中去查找,如果找不到才会去remote repository中去查找,默认的远程仓库为 http://repo.maven.apache.org/maven2/。也可以更改远程仓库为(可能是公司内部的中心仓库)
mvn site会为项目产生一个site以提供一些基本信息
mvn idea:idea
mvn eclipse:eclipse
这两条命令会为将项目构建为便于IntelliJ IDEA和Eclipse加载

插件的使用

...
<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <version>3.3</version>
      <configuration>
        <source>1.5</source>
        <target>1.5</target>
      </configuration>
    </plugin>
  </plugins>
</build>
...

插件将会自动下载和使用

配置依赖关系

一个依赖一般由四个关键元素确定,groupId, artifactId, version和scope
如何查看一个以来的这些属性呢,以log4j为例。
使用Google搜索site:www.ibiblio.org maven2 log4j,在/maven2/log4j/log4j目录中查看maven-metadata.xml文件,it may looks like:

<metadata>
  <groupId>log4j</groupId>
  <artifactId>log4j</artifactId>
  <version>1.1.3</version>
  <versioning>
    <versions>
      <version>1.1.3</version>
      <version>1.2.4</version>
      <version>1.2.5</version>
      <version>1.2.6</version>
      <version>1.2.7</version>
      <version>1.2.8</version>
      <version>1.2.11</version>
      <version>1.2.9</version>
      <version>1.2.12</version>
    </versions>
  </versioning>
</metadata>

如何将jar包发布到remote repository

要在pom.xml中配置remote repository的url,在setttings.xml配置连接到remote repository的authentication信息。
实例如下:

<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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.mycompany.app</groupId>
  <artifactId>my-app</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>Maven Quick Start Archetype</name>
  <url>http://maven.apache.org</url>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.codehaus.plexus</groupId>
      <artifactId>plexus-utils</artifactId>
      <version>1.0.4</version>
    </dependency>
  </dependencies>

  <build>
    <filters>
      <filter>src/main/filters/filters.properties</filter>
    </filters>
    <resources>
      <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
      </resource>
    </resources>
  </build>
  <!--
   |
   |
   |
   -->
  <distributionManagement>
    <repository>
      <id>mycompany-repository</id>
      <name>MyCompany Repository</name>
      <url>scp://repository.mycompany.com/repository/maven2</url>
    </repository>
  </distributionManagement>
</project>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
                      http://maven.apache.org/xsd/settings-1.0.0.xsd">
  ...
  <servers>
    <server>
      <id>mycompany-repository</id>
      <username>jvanzyl</username>
      <!-- Default value is ~/.ssh/id_dsa -->
      <privateKey>/path/to/identity</privateKey> (default is ~/.ssh/id_dsa)
      <passphrase>my_key_passphrase</passphrase>
    </server>
  </servers>
  ...
</settings>

pom.xml中<distributionManagement>中配置repository,其中id要和settings.xml中的server的id相一致。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值