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!
from: http://www.firefoxbug.com/index.php/archives/2815/
maven学习一(HelloWorld工程)的更多相关文章
- iOS学习之HelloWorld工程
本文应读者要求,主要简介使用Xcode创建一个“HelloWorld”工程. 1.打开Xcode,点击新建工程 选择工程类型 2.填写工程信息 3.代码简介 // // main.m // hello ...
- maven学习二(dependencies)
在前面一篇文章maven学习一(HelloWorld工程)已经对maven有了基本介绍,本文开始介绍maven依赖,通过如何如何增加log4j来学习maven的dependencies no-depe ...
- [maven学习笔记]第一节,认识maven,搭建maven开发环境,写第一个HelloWorld
本文地址:http://blog.csdn.net/sushengmiyan/article/details/40142771 maven官网:http://maven.apache.org/ 学习视 ...
- android的helloworld工程目录学习
android的helloworld工程目录学习 Android工程的主要目录有src.gen.Android X.X.bin.res等文件夹. 1. Src文件夹 Src文件夹包含java源 ...
- Maven学习第4期---Maven简单使用
一.Maven常用命令 在学习使用Maven构建项目之前,先来了解一下Maven一些实用的命令.mvn的命令有很多,在项目开发中,理解了下面的几个常用命令后,运用maven就基本没有问题了.Maven ...
- maven学习(1)下载和安装和初步使用(手动构建项目和自动构建项目)
1:背景 关于项目的搭建,有些人使用开发工具搭建项目,然后将项目所依赖第三方jar 复制到类路径下面,上述搭建方式没有第三方类库的依赖关系,在导入一个jar包的时候,这个jar包还可能依赖其他jar包 ...
- Maven学习笔记-03-Eclipse下maven项目在Tomcat7和Jetty6中部署调试
现在最新的Eclipse Luna Release 已经内置了Maven插件,这让我们的工作简洁了不少,只要把项目直接导入就可以,不用考虑插件什么的问题,但是导入之后的项目既可以部署在Tomcat也可 ...
- 基于eclipse创建android的helloworld工程
基于eclipse创建android的helloworld工程 之前用过Android studio感觉很慢,决定采用eclipse来学习Android开发.下面来看是怎么创建的. 选择File--- ...
- eclipse 创建maven 项目 动态web工程完整示例
需求表均同springmvc案例 此处只是使用maven 注意,以下所有需要建立在你的eclipse等已经集成配置好了maven了,说白了就是新建项目的时候已经可以找到maven了 没有的话需要安装m ...
随机推荐
- 谁说前端不需要懂-Nginx反向代理与负载均衡
转:https://juejin.im/post/5b01336af265da0b8a67e5c9 学到老活到老 前端圈一直很新,一直要不停的学习,而且在进入大厂的路上,还要求熟悉一门后台语言等等.用 ...
- C#面向对象(基础知识)
面向对象:就是CLASS,class就是用户自定义类型: class:用户自定义引用类型:三大特点:封装.继承.多态: 解决方案中右键添加class:class内可以写结构体,枚举,函数: C#中各个 ...
- Map<String,String>集合的四种遍历方式 其中有一种针对大容量的数据集合
- Java 程序员必须收藏的资源大全
Java 程序员必须收藏的资源大全 Java(27) 古董级工具 这些工具伴随着Java一起出现,在各自辉煌之后还在一直使用. Apache Ant:基于XML的构建管理工具.官网 cglib:字节码 ...
- laravel 列表搜索查询(when,with用法以及关联图像id处理图像路径)
laravel中比较常规的列表查询: /** * 活动列表 * @param Request $request * @return \Illuminate\Http\JsonResponse */ p ...
- Myeclipse调试模式下自动提示变量值设置
1.Window->Preferences->Java->Editor->Hovers 将[Variable Values]选择即可,如果第一个[Combined Hover] ...
- WebApi的调用-1.前端调用
前端调用 html <div class="row"> <form id="queryForm"> <input name=&qu ...
- WCF服务寄宿Windows
windows服务的介绍 Windows服务应用程序是一种需要长期运行的应用程序,它对于服务器环境特别适合.它没有用户界面,并且也不会产生任何可视输出.任何用户消息都会被写进Windows事件日志.计 ...
- hdu 1072 有炸弹的迷宫 (DFS)
题意:在n×m的地图上,0表示墙,1表示空地,2表示人,3表示目的地,4表示有定时炸弹重启器.定时炸弹的时间是6,人走一步所需要的时间是1.每次可以上.下.左.右移动一格.当人走到4时如果炸弹的时间不 ...
- SpringBank 开发日志 一种简单的拦截器设计实现
当交易由Action进入Service之前,需要根据不同的Service实际负责业务的不同,真正执行Service的业务逻辑之前,做一些检查工作.这样的拦截器应该是基于配置的,与Service关联起来 ...