关闭

maven

标签: maven项目管理
242人阅读 评论(0) 收藏 举报
分类:

简介

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相一致。

0
0
查看评论

Maven真的有那么好吗

http://1.1lifes.sinaapp.com/?p=202 之前一直听说maven的大名,直到它后来者居上,但因为工作环境,一直没有使用过maven,对它的很多功能都很期待。这不,这次换了工作新公司使用maven,也就自然而然的切换到maven了。使用maven时间不长,...
  • yq76034150
  • yq76034150
  • 2012-01-03 16:49
  • 6818

使用maven搭建多模块项目

我们为什么要进行模块化开发?在多人使用Maven协作开发项目时,尤其是稍微上点规模的项目,每个RD的工作都细分到具体功能和模块,有些模块甚至还要单独部署。我们假设有这样一个商城项目,包括以下几个模块: - 商城前台(shop) - 管理后台(admin) - 数据库交互模块(dao) - 通...
  • u011404265
  • u011404265
  • 2017-02-06 11:33
  • 3427

maven本地私服的搭建

maven本地私服的搭建
  • whh743
  • whh743
  • 2016-12-10 21:46
  • 3270

1、Maven是什么及其优点

(1)平时我们开发项目时,一般都是一个项目就是一个工程。我们划分模块时,都是使用package来进行划分。但是,当项目很大时,有很多子模块时,即使是package来进行划分,也是让人眼花缭乱。             优点一:项目非常大时,...
  • sword_anyone
  • sword_anyone
  • 2017-04-24 10:38
  • 1227

百度云推送集成之Maven方式

现在自己的产品没有推送功能都不好意思出门啊! 前段时间做推送需求的时候,经过几轮测试最后敲定的用百度云推送。 百度云推送集成非常方便,端上大概半天不到就搞定了,官网给的教程非常给力,详细而又全面。 服务端的sdk也有非常详细的示例,直接导入相关jar就可以了,不过对于少部分使用maven来管理...
  • puyuanbo
  • puyuanbo
  • 2016-01-06 20:01
  • 3370

Maven学习(十八)-- Maven最佳实践:版本管理

找到了一篇博客,很多啊,是讲Maven中的版本管理的,很好,分享一下, 原文作者:juvenshun 原文地址:http://juvenshun.iteye.com/blog/376422 --------------------------------------...
  • m261030956
  • m261030956
  • 2015-06-13 12:57
  • 646

maven 简单入门教学

Maven那点事儿(Eclipse版) 前言:   由于最近工作学习,总是能碰到Maven的源码。虽然平时工作并不使用Maven,但是为了学习一些源码,还是必须要了解下。这篇文章不是一个全面的Maven解析,而是一个简单的介绍,包括Eclipse中如何使用Maven,如何利用Maven...
  • maple980326
  • maple980326
  • 2016-08-03 15:51
  • 4647

Maven详解之------maven版本管理

使用Maven进行项目的版本管理,以及注意事项
  • wanghantong
  • wanghantong
  • 2014-11-18 00:10
  • 48197

Maven环境搭建和介绍

最近项目弄完了,有好多时间,准备把以前的知识复习一遍,以便日后更好的使用,先从maven搭建开始,然后再搭建以下SSH+mybatis的框架,弄完了在学学Hadoop分布式相关的东西。        安装前先配置好电脑的相关环境变量。 &#...
  • fengshizty
  • fengshizty
  • 2015-01-23 11:45
  • 27547

maven基本知识整理

1. 基本功能和用途maven是 一个项目管理和构建自动化的工具,相比于ant,maven不需要写复杂的脚本,采用声明式的类库依赖管理。可以完成项目构建,比如生成war,打包jar;可以生成项目文档,比如javadoc;生成报告,比如junit测试报告;生成依赖类库,执行发布和部署等。 maven...
  • xiongjiezk
  • xiongjiezk
  • 2015-12-06 02:58
  • 757
    个人资料
    • 访问:17491次
    • 积分:423
    • 等级:
    • 排名:千里之外
    • 原创:27篇
    • 转载:0篇
    • 译文:0篇
    • 评论:1条
    文章存档
    最新评论