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! from: http://www.firefoxbug.com/index.php/archives/2815/

maven学习一(HelloWorld工程)的更多相关文章

  1. iOS学习之HelloWorld工程

    本文应读者要求,主要简介使用Xcode创建一个“HelloWorld”工程. 1.打开Xcode,点击新建工程 选择工程类型 2.填写工程信息 3.代码简介 // // main.m // hello ...

  2. maven学习二(dependencies)

    在前面一篇文章maven学习一(HelloWorld工程)已经对maven有了基本介绍,本文开始介绍maven依赖,通过如何如何增加log4j来学习maven的dependencies no-depe ...

  3. [maven学习笔记]第一节,认识maven,搭建maven开发环境,写第一个HelloWorld

    本文地址:http://blog.csdn.net/sushengmiyan/article/details/40142771 maven官网:http://maven.apache.org/ 学习视 ...

  4. android的helloworld工程目录学习

    android的helloworld工程目录学习 Android工程的主要目录有src.gen.Android X.X.bin.res等文件夹. 1.     Src文件夹 Src文件夹包含java源 ...

  5. Maven学习第4期---Maven简单使用

    一.Maven常用命令 在学习使用Maven构建项目之前,先来了解一下Maven一些实用的命令.mvn的命令有很多,在项目开发中,理解了下面的几个常用命令后,运用maven就基本没有问题了.Maven ...

  6. maven学习(1)下载和安装和初步使用(手动构建项目和自动构建项目)

    1:背景 关于项目的搭建,有些人使用开发工具搭建项目,然后将项目所依赖第三方jar 复制到类路径下面,上述搭建方式没有第三方类库的依赖关系,在导入一个jar包的时候,这个jar包还可能依赖其他jar包 ...

  7. Maven学习笔记-03-Eclipse下maven项目在Tomcat7和Jetty6中部署调试

    现在最新的Eclipse Luna Release 已经内置了Maven插件,这让我们的工作简洁了不少,只要把项目直接导入就可以,不用考虑插件什么的问题,但是导入之后的项目既可以部署在Tomcat也可 ...

  8. 基于eclipse创建android的helloworld工程

    基于eclipse创建android的helloworld工程 之前用过Android studio感觉很慢,决定采用eclipse来学习Android开发.下面来看是怎么创建的. 选择File--- ...

  9. eclipse 创建maven 项目 动态web工程完整示例

    需求表均同springmvc案例 此处只是使用maven 注意,以下所有需要建立在你的eclipse等已经集成配置好了maven了,说白了就是新建项目的时候已经可以找到maven了 没有的话需要安装m ...

随机推荐

  1. LeetCode(43):字符串相乘

    Medium! 题目描述: 给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式. 示例 1: 输入: num1 = &quo ...

  2. Python中的各种转义符\n\r\t

    转义符 描述 \ 续行符(在行尾时) \\ 反斜杠符号 ' 单引号 " 双引号 \a 响铃 \b 退格(Backspace) \e 转义 \000 空 \n 换行 \v 纵向制表符 \t 横 ...

  3. JavaScript脚本的两种放置方式

    JavaScript脚本的两种放置方式 1在body里用 script标签引用 2 直接写在<script></script>标签之中

  4. SpringBank 开发日志 Mybatis 使用redis 作为二级缓存时,无法通过cacheEnabled=false 将其关闭

    <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC ...

  5. 【AtCoder】CODE FESTIVAL 2017 qual A

    A - Snuke's favorite YAKINIKU -- #include <bits/stdc++.h> #define fi first #define se second # ...

  6. 【spring基础】spring与jdbc整合详解

    先上一段简单示例 public class MyTemplate { private DataSource dataSource; public DataSource getDataSource() ...

  7. P3144 关闭农场 并查集 反向

    FJ和他的奶牛们正在计划离开小镇做一次长的旅行,同时FJ想临时地关掉他的农场以节省一些金钱. 这个农场一共有被用M条双向道路连接的N个谷仓(1<=N,M<=3000).为了关闭整个农场,F ...

  8. 【Java】 剑指offer(35) 复杂链表的复制

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 请实现函数ComplexListNode* Clone(Compl ...

  9. Unity3D 中的面向对象设计 {游戏对象(创建、删除、获取),以及添加修改组件}

    一.创建游戏对象 游戏对象分三种:(1) 将物体模型等资源由Project工程面板拖拽到Hierarchy层次面板中 (2) 由GameObject菜单创建Unity自带的游戏对象,如Cube.Cam ...

  10. POJ - 1266 -

    题目大意:给出一条圆弧上的两个端点A,B,和圆弧上两端点之间的一个点C,现在要用一块各个定点的坐标均为整数的矩形去覆盖这个圆弧,要求最小的矩形面积. 思路:叉积在本体发挥很强大的作用.首先求出三个点所 ...