Maven学习第一篇
来源:互联网 发布:淘宝好评晒图怎么删掉 编辑:程序博客网 时间:2024/05/01 17:16
一.maven目录结构简介
pom.xml 是配置文件
/src 源代码目录
/src/main 工程源代码目录
/src/main/java 工程java源代码目录
/src/main/resource 工程的资源目录
/src/main/webapp 工程的web目录
/src/test 单元测试目录
/src/test/java
/target 输出目录,所有的输出物都存放在这个目录下
/target/classes 编译之后的class文件
每一个阶段的任务都知道怎么正确完成自己的工作,比如compile任务就知道从src/main/java下编译所有的java文件,并把它的输出class文件存放到target/classes中。对maven来说,采用"约定优于配置"的策略可以减少修改配置的工作量,也可以降低学习成本,更重要的是,给项目引入了统一的规范。
二.pom.xml介绍
Project Object Model,项目对象模型。
通过xml格式保存的pom.xml文件。
作用类似ant的build.xml文件,功能更强大。
该文件用于管理:源代码、配置文件、开发者的信息和角色、问题追踪系统、组织信息、项目授权、项目的url、项目的依赖关系等等。一个完整的pom.xml文件,放置在项目的根目录下
下面让我们来了解一下pom.xml文件。
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.huawei.bdpp</groupId>
<artifactId>bdpp-frame</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<name>bdpp-frame Maven Webapp</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>
UTF-8
</project.build.sourceEncoding>
<version.spring3>3.2.2.RELEASE</version.spring3>
<version.struts2>2.3.15.3</version.struts2>
<version.ibatis>2.3.4.726</version.ibatis>
<version.slf4j>1.7.2</version.slf4j>
<version.logback>1.0.9</version.logback>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
<dependencies>
<!-- spring3 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${version.spring3}</version>
</dependency>
</dependencies>
</project>
project:pom.xml文件中的顶层元素;
modelVersion:指明POM使用的对象模型的版本。这个值很少改动。
groupId:定义了项目属于哪个组,这个组往往和项目所在的组织或公司存在关联。譬如在googlecode上建立了一个名为myapp的项目,
那么groupId就应该是com.googlecode.myapp
artifactId: 定义了当前Maven项目在组织中唯一的ID,可以理解为项目中的模块, 模块为Maven中最小单位构件
version:项目产品的版本号。Maven帮助你管理版本,可以经常看到SNAPSHOT这个版本,表明项目处于开发阶段。 Version也可以用区间表达式来表示,比
如(2.0,)表示>2.0,[2.0,3.0)表示2.0<=ver<3.0;多个条件之间用逗号分隔,比如[1,3),[5,7]。
Packaging: 打包的格式,可以为:pom ,jar, maven-plugin , ejb , war , ear , rar , par
name:项目的显示名称,通常用于maven产生的文档中。
url:指定项目站点,通常用于maven产生的文档中。
description:描述此项目,通常用于maven产生的文档中。
scope 作用域限制
取值:
compile(编译范围)
compile是默认的范围;如果没有提供一个范围,那该依赖的范围就是
编译范围。编译范围依赖在所有的classpath中可用,同时它们也
会被打包。
provided(已提供范围)
provided依赖只有在当JDK或者一个容器已提供该依赖之后才使用。
例如,如果你开发了一个web应用,你可能在编译classpath中需要可
用 的Servlet API来编译一个servlet,但是你不会想要在打包好的WAR
中包含这个Servlet API;这个Servlet API JAR由你的应用服务器或
者servlet容器提供。已提供范围的依赖在编译classpath(不是运行
时)可用。它们不是传递性的,也不会被打包
runtime(运行时范围)
runtime依赖在运行和测试系统的时候需要,但在编译的时候不需要。比如,你可能在编译的时候只需要JDBC API JAR,而只有在运行的时候才需要JDBC驱动实现。
test(测试范围)
test范围依赖 在一般的 编译和运行时都不需要,它们只有在测试编译和测试运行阶段可用。
system(系统范围)
system范围依赖与provided类似,但是你必须显式的提供一个对于本地系统中JAR文件的路径。这么做是为了允许基于本地对象编译,而这些对象是系统类库的一部分。这样的构件应该是一直可用的,Maven也不会在仓库中去寻找它。 如果你将一个依赖范围设置成系统范围,你必须同时提供一个systemPath元素 。注意该范围是不推荐使用的(你应该一直尽量去从公共或定制的Maven仓库中引用依赖)。
type 一般在pom引用依赖时候出现,其他时候不用
optional 是否可选依赖
对于一个项目中依赖关系列表是我们需要关注的:
<dependencies>
<!-- spring3 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${version.spring3}</version>
</dependency>
</dependencies>
三.在pom.xml中定义一些属性,然后在其他地方用${xxx}进行引用。比如:
Xml代码
- <project>
- <modelVersion>4.0.0</modelVersion>
- ...
- <properties>
- <var1>value1</var1>
- <my.filter.value>hello</my.filter.value>
- </properties>
- </project>
1.系统的环境变量通过env.前缀引用比如env.PATH
2.所有pom中的元素都可以用project.前缀进行引用,以下是部分常用的
${project.build.directory }
${project.build.outputDirectory}
${project.name }
${project.version }
${project.build.finalName }
3.在settings.xml中的设定都可以通过settings.前缀进行引用
例如:${settings.localRepository }
4.用户在pom中定义的自定义属性
<project>
...
<properties>
<my.filter.value>hello</my.filter.value>
</properties>
...
</project>
则引用 ${my.filter.value }就会得到值 hello
四.在maven指定编码
<project>
...
<properties>
<project.build.sourceEncoding>
UTF-8
</project.build.sourceEncoding>
</properties>
...
</project>
五.maven目录结构不是标准的,如何让maven支持
指定source目录和test-source目录即可。
<build>
<directory>target</directory>
<sourceDirectory>src</sourceDirectory>
<scriptSourceDirectory>js/scripts</scriptSourceDirectory>
<testSourceDirectory>test</testSourceDirectory>
<outputDirectory>bin</outputDirectory>
<testOutputDirectory>bin</testOutputDirectory>
</build>
六. 如何给插件指派参数?比如我要设置一些编译参数
以下内容设定编译器编译java1.5的代码
<project>
...
<build>
...
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
</plugins>
...
</build>
...
</project>
- maven 学习第一篇
- Maven学习第一篇
- 第一篇、maven学习之路--下载安装
- servlet学习(第一篇)
- 多线程学习第一篇
- 第一篇学习日记
- 第一篇PHP学习
- android 学习第一篇
- wordpress 学习第一篇
- 学习android第一篇
- Linux学习第一篇
- Linux学习第一篇
- android学习第一篇
- lucene学习第一篇
- latex学习第一篇
- 学习JBPM-第一篇
- C++学习第一篇
- java 学习第一篇
- 无线短距离通信-蓝牙与wifi(一)
- spring 多个定时器
- Nullable<T>
- ubuntu apt-get update 失败解决。
- 轻松搞定面试中的链表题
- Maven学习第一篇
- 我要关机(CloseMyPC)新版本升级蓄势待发!
- samtools manual(1)
- 动态规划详解
- Yarn的Mailing list
- MySQL #2006 - MySQL server has gone away 问题解决方法
- Java中class是如何加载到JVM中的(Class.forName("name")和ClassLoader.loadClass("name")的区别)
- 【线性规划与网络流24题 10】餐巾计划
- 用于软件包管理的21个Linux YUM命令 转载