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(45): 跳跃游戏 II

    Hard! 题目描述: 给定一个非负整数数组,你最初位于数组的第一个位置. 数组中的每个元素代表你在该位置可以跳跃的最大长度. 你的目标是使用最少的跳跃次数到达数组的最后一个位置. 示例: 输入: [ ...

  2. LeetCode(33):搜索旋转排序数组

    Medium! 题目描述: 假设按照升序排序的数组在预先未知的某个点上进行了旋转. ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] ). 搜索一个给定的目标值 ...

  3. JAVA代码设置selector不同状态下的背景

    Selector设置button点击效果(详细)以及常见问题https://www.jianshu.com/p/a0ddba6d7969 Android 代码动态设置TextView的背景.颜色Sel ...

  4. JAVA开发工程师面试(1)

    我已经有很长一段时间没有更新博客了,难道是博主我变懒惰了吗?哎,这样可不行啊,我还有好多知识要学习,要和大家分享.以后我需要更加努力,改掉自己的惰性.本人文采不怎么样,只能是把自己所想的说出来,想和大 ...

  5. C#编程的语法积累(一)

    1.自动属性 之前的实现方式: private int id; public int Id { set {id = value;} get {return id;} } 现在可通过自动属性实现: pu ...

  6. python全栈开发day13-迭代器、生成器、列表推导式等

    昨日内容:函数的有用信息.带参数的装饰器.多个装饰器修饰一个函数 迭代器 可迭代对象:内部含有__iter__方法 迭代器 定义:可迭代对象.__iter__()就是迭代器,含有__iter__且__ ...

  7. 利用jQuery-UI和jsPlumb实现拖拽连接模型

    简介 之前公司需要做一个自定义数据搜索模型的功能,大体是这样的:左边显示的每一个模型对应于数据库中的一个表,把左边的模型拉入右边的容器内,会显示这个模型(也就是表)下的列信息,然后通过连线确定各独立的 ...

  8. cglib动态代理导致注解丢失问题及如何修改注解允许被继承

    现象 SOAService这个bean先后经过两个BeanPostProcessor,会发现代理之后注解就丢失了. 开启了cglib代理 @SpringBootApplication @EnableA ...

  9. Java内存管理-程序运行过程(一)

    勿在流沙住高台,出来混迟早要还的. 做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! 相信在做Java开发的伙伴一定知道 JVM(Java Virtual Machine( ...

  10. ISO9000和CMM

    ISO9000和CMM,谁更适合软件开发? ISO9000 和 CMM 是国际上通用的软件质量评估和管理方法.二者有很多相似之处,它们的实施都可以改变软件开发的不规范.文档不齐.维护跟不上.质量漏洞多 ...