- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章Java的项目构建工具Maven的配置和使用教程由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
1、Maven是什么 。
Maven是一个用java开发的项目构建工具, 它能使项目构建过程中的编译、测试、发布、文档自动化, 大大减轻了程序员部署负担.
2、安装Maven 。
安装maven非常简单,访问Maven官方页下载即可:http://maven.apache.org/download.cgi 下载完后配置M2_HOME环境变量, 然后终端运行mvn --version, 看到正确的输出提示,Maven就安装完成了.
3、Maven基本概念 Maven的核心思想是POM, 即Project Object Model(项目对象模型)。POM文件是以XML文件的形式描述一个Maven项目所用到的资源(源码、依赖、测试等)。下图描述了POM文件的结构, 以及Maven是如何调用POM文件的.
当执行一条Maven命令时, 会传入一个pom文件, Maven会在该pom里面的描述的资源上执行 。
POM文件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
<
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
>
<!-- The Basics -->
<
groupId
>...</
groupId
>
<
artifactId
>...</
artifactId
>
<
version
>...</
version
>
<
packaging
>...</
packaging
>
<
dependencies
>...</
dependencies
>
<
parent
>...</
parent
>
<
dependencyManagement
>...</
dependencyManagement
>
<
modules
>...</
modules
>
<
properties
>...</
properties
>
<!-- Build Settings -->
<
build
>...</
build
>
<
reporting
>...</
reporting
>
<!-- More Project Information -->
<
name
>...</
name
>
<
description
>...</
description
>
<
url
>...</
url
>
<
inceptionYear
>...</
inceptionYear
>
<
licenses
>...</
licenses
>
<
organization
>...</
organization
>
<
developers
>...</
developers
>
<
contributors
>...</
contributors
>
<!-- Environment Settings -->
<
issueManagement
>...</
issueManagement
>
<
ciManagement
>...</
ciManagement
>
<
mailingLists
>...</
mailingLists
>
<
scm
>...</
scm
>
<
prerequisites
>...</
prerequisites
>
<
repositories
>...</
repositories
>
<
pluginRepositories
>...</
pluginRepositories
>
<
distributionManagement
>...</
distributionManagement
>
<
profiles
>...</
profiles
>
</
project
>
|
modelVersion是POM模型版本, 4.0.0支持Maven2和3 Maven Coordinates(Maven坐标) 。
(1)groupId: 它是一个组织或者项目的唯一ID, 大多数情况下会使用项目的java包的根名作为groupID, 例如com.pastqing 。
(2)artifactId:它是正在构建的项目名称, 例如一个支付系统artifactId是web-pay。artifactId 是Maven仓库中groupId目录下的子目录名 。
(3)version:顾名思义项目发行的版本号 。
以上三项都是构建结果名称的一部分, 在项目构建后会生成一个jar包,位于Maven仓库的路径就是MAVEN_REPO/com/pastqing/web-pay/1.0/web-pay-1.0.jar 。
4、一个用Maven构建的Hello World java项目 。
利用Maven插件archetype构建一个项目: 在终端中打开工作目录 运行命令:
1
|
mvn archetype:generate
|
, 第一次运行时比较慢,原因是第一次需要从Maven中央仓库中下载相关项目原型。下载完毕后,会选择项目模型,以及输入groupId, artifactId,version等,构建完毕后会有成功提示。 打包项目:切换到项目根目录,运行mvn package。打包成功之后,项目会生成一个target文件夹,里面有生成好的jar文件和class文件。 运行jar文件:
1
|
java -
cp
target
/helloWorld-1
.0-SNAPSHOT.jar com.pastqing.App
|
至此一个最简单Maven构建的java项目就完成了.
5、一个用Maven构建的java-web项目 。
生成一个web项目与生成java项目基本类似,只是用的模型不同而已。这里不再阐述。下面我们具体说说如何使用Tomcat或者jetty插件运行web项目。这里我们以tomcat举例.
Maven Tomcat插件安装: http://tomcat.apache.org/maven-plugin-2.2/ 我们将如下插件信息加入到web项目中的POM文件中 。
1
2
3
4
5
6
7
8
9
10
|
<
plugin
>
<
groupId
>org.apache.tomcat.maven</
groupId
>
<
artifactId
>tomcat6-maven-plugin</
artifactId
>
<
version
>2.2</
version
>
</
plugin
>
<
plugin
>
<
groupId
>org.apache.tomcat.maven</
groupId
>
<
artifactId
>tomcat7-maven-plugin</
artifactId
>
<
version
>2.2</
version
>
</
plugin
>
|
这样我们集成了这个tomcat的Maven插件, 只需要一个命令就可以部署、启动服务了。命令如下:
1
|
mvn tomcat:run
|
(tomcat6) 。
1
|
mvn tomcat7:run
|
(tomcat7) 。
使用tomcat Maven插件自动部署到外部tomcat 以上自动部署,会使用Maven内嵌的Tomcat, 下面我们修改POM文件, 让项目部署到外部的Tomcat中.
修改项目POM文件,添加服务器配置信息 。
1
2
3
4
5
6
7
8
9
10
11
|
<
plugin
>
<
groupId
>org.apache.tomcat.maven</
groupId
>
<
artifactId
>tomcat7-maven-plugin</
artifactId
>
<
version
>2.2</
version
>
<
configuration
>
<
url
>http://localhost:8080/manager/text</
url
>
<
server
>tomcat7</
server
>
<
username
>admin</
username
>
<
password
>admin</
password
>
</
configuration
>
</
plugin
>
|
其中server, username, password的值与%Maven_HOME中的setting.xml中的server, username, password一一对应.
启动外部tomcat, 运行命令mvn tomcat7:redeploy 。
6、如何用Maven构建多模块项目 。
1.父POM 。
所有的Maven pom文件都继承自一个父POM, 如果没有指定父pom, 则该pom文件继承自根POM。pom文件的集成关系如下图所示:
可以让一个pom文件显式地继承另一个pom文件。这样,可以通过修改公共父pom文件的设置来修改所有子pom文件的设置。这里我们使用parent标签来定义父pom。下面我们具体搭建一个多模块Mavne项目 。
2.构建项目目录结构 。
我们创建一个maven-web项目, 名字叫EducationCloud, 接下来我们在项目目录下创建几个文件夹用来划分我们的模块。它们分别是Education-parent(父模块), Education-core(业务), Education-entity(实体), Education-web(web服务) 。
目录的划分可以根据需要进行, 我的划分如上 。
3.修改pom文件 。
我们用module标签来进行划分模块。打开根目录下的pom文件, 添加moudle标签.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
<
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.EducationCloud</
groupId
>
<
artifactId
>EducationCloud</
artifactId
>
<
version
>1.0-SNAPSHOT</
version
>
<
packaging
>pom</
packaging
>
<
modules
>
<
module
>Education-parent</
module
>
<
module
>Education-core</
module
>
<
module
>Education-entity</
module
>
<
module
>Education-web</
module
>
</
modules
>
<
name
>EducationCloud</
name
>
</
project
>
|
这里我们说下packaging标签:最常见的就是打包为jar, war了。任何一个Maven项目都需要定义pom文件中的packaging元素, 如果不声明该元素, 则默认打包为jar, 如果定义值为war那么就打包为war包。如果值为pom,那么什么包都不生成(通常用于父模块).
给各个模块添加parent标签: parent标签用来定义父POM的坐标位置的, 定义如下:
1
2
3
4
5
6
|
<
parent
>
<
groupId
>com.EducationCloud</
groupId
>
<
artifactId
>EducationCloud-parent</
artifactId
>
<
version
>1.0-SNAPSHOT</
version
>
<
relativePath
></
relativePath
>
</
parent
>
|
groupId, aritfactId, version是常规表示父pom位置信息的元素, relativePath是表示父pom位置的相对路径, 默认为../pom.xml, 这里需要注意的是groupId, aritfactId, version必须与父pom文件中的对应起来 。
使用dependencyManagement管理项目所有依赖 为了统一管理依赖,我们在父项目模块的pom文件中使用dependencyManagement来声明项目的所有依赖, 这样在其他的子项目中引用依赖时就可以省略版本号的编写, 修改起来也很容易。 编写**父项目模块**educationCloud-parent的pom文件, 添加如下: 使用pluginManagement管理项目中的Maven插件 为了统一管理项目中的Maven插件, 如Maven编译插件, 打包插件等及其配置信息, 在父项目 pom文件中添加pluginManagement来管理, 这样在所有子模块中引用的插件都会统一处理, 添加如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
<
pluginManagement
>
<
plugins
>
<!-- complile插件的配置 -->
<
plugin
>
<
groupId
>org.apache.maven.plugins</
groupId
>
<
artifactId
>maven-complier-plugin</
artifactId
>
<
version
>3.3</
version
>
<
configuration
>
<
source
>1.7</
source
>
<
target
>1.7</
target
>
<
encoding
>UTF-8</
encoding
>
</
configuration
>
<
plugin
>
</
plugins
>
</
pluginManagement
>
|
上面我们添加了maven编译插件的配置,用jdk1.7编译, 保存后我们可以在各个子模块的Effective pom中看到相应的修改.
使用properties标签定义常量: 我们将各个依赖的版本号定义为不同的常量,这样方便以后的修改:
1
2
3
4
5
6
7
|
<
properties
>
<
jdkVersion
>1.7</
jdkVersion
>
<
servletVersion
>3.1.0</
servletVersion
>
<
mysqlVersion
>5.1.34</
mysqlVersion
>
<
junitVersion
>4.12</
junitVersion
>
<
defaultEncoding
>UTF-8</
defaultEncoding
>
</
properties
>
|
引用时用${jdkVersion}的形式引用即可.
注,以上操作均可在IDE中操作, 更加方便简单.
最后此篇关于Java的项目构建工具Maven的配置和使用教程的文章就讲到这里了,如果你想了解更多关于Java的项目构建工具Maven的配置和使用教程的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我在网上搜索但没有找到任何合适的文章解释如何使用 javascript 使用 WCF 服务,尤其是 WebScriptEndpoint。 任何人都可以对此给出任何指导吗? 谢谢 最佳答案 这是一篇关于
我正在编写一个将运行 Linux 命令的 C 程序,例如: cat/etc/passwd | grep 列表 |剪切-c 1-5 我没有任何结果 *这里 parent 等待第一个 child (chi
所以我正在尝试处理文件上传,然后将该文件作为二进制文件存储到数据库中。在我存储它之后,我尝试在给定的 URL 上提供文件。我似乎找不到适合这里的方法。我需要使用数据库,因为我使用 Google 应用引
我正在尝试制作一个宏,将下面的公式添加到单元格中,然后将其拖到整个列中并在 H 列中复制相同的公式 我想在 F 和 H 列中输入公式的数据 Range("F1").formula = "=IF(ISE
问题类似于this one ,但我想使用 OperatorPrecedenceParser 解析带有函数应用程序的表达式在 FParsec . 这是我的 AST: type Expression =
我想通过使用 sequelize 和 node.js 将这个查询更改为代码取决于在哪里 select COUNT(gender) as genderCount from customers where
我正在使用GNU bash,版本5.0.3(1)-发行版(x86_64-pc-linux-gnu),我想知道为什么简单的赋值语句会出现语法错误: #/bin/bash var1=/tmp
这里,为什么我的代码在 IE 中不起作用。我的代码适用于所有浏览器。没有问题。但是当我在 IE 上运行我的项目时,它发现错误。 而且我的 jquery 类和 insertadjacentHTMl 也不
我正在尝试更改标签的innerHTML。我无权访问该表单,因此无法编辑 HTML。标签具有的唯一标识符是“for”属性。 这是输入和标签的结构:
我有一个页面,我可以在其中返回用户帖子,可以使用一些 jquery 代码对这些帖子进行即时评论,在发布新评论后,我在帖子下插入新评论以及删除 按钮。问题是 Delete 按钮在新插入的元素上不起作用,
我有一个大约有 20 列的“管道分隔”文件。我只想使用 sha1sum 散列第一列,它是一个数字,如帐号,并按原样返回其余列。 使用 awk 或 sed 执行此操作的最佳方法是什么? Accounti
我需要将以下内容插入到我的表中...我的用户表有五列 id、用户名、密码、名称、条目。 (我还没有提交任何东西到条目中,我稍后会使用 php 来做)但由于某种原因我不断收到这个错误:#1054 - U
所以我试图有一个输入字段,我可以在其中输入任何字符,但然后将输入的值小写,删除任何非字母数字字符,留下“。”而不是空格。 例如,如果我输入: 地球的 70% 是水,-!*#$^^ & 30% 土地 输
我正在尝试做一些我认为非常简单的事情,但出于某种原因我没有得到想要的结果?我是 javascript 的新手,但对 java 有经验,所以我相信我没有使用某种正确的规则。 这是一个获取输入值、检查选择
我想使用 angularjs 从 mysql 数据库加载数据。 这就是应用程序的工作原理;用户登录,他们的用户名存储在 cookie 中。该用户名显示在主页上 我想获取这个值并通过 angularjs
我正在使用 autoLayout,我想在 UITableViewCell 上放置一个 UIlabel,它应该始终位于单元格的右侧和右侧的中心。 这就是我想要实现的目标 所以在这里你可以看到我正在谈论的
我需要与 MySql 等效的 elasticsearch 查询。我的 sql 查询: SELECT DISTINCT t.product_id AS id FROM tbl_sup_price t
我正在实现代码以使用 JSON。 func setup() { if let flickrURL = NSURL(string: "https://api.flickr.com/
我尝试使用for循环声明变量,然后测试cols和rols是否相同。如果是,它将运行递归函数。但是,我在 javascript 中执行 do 时遇到问题。有人可以帮忙吗? 现在,在比较 col.1 和
我举了一个我正在处理的问题的简短示例。 HTML代码: 1 2 3 CSS 代码: .BB a:hover{ color: #000; } .BB > li:after {
我是一名优秀的程序员,十分优秀!