① 手工构建自己的maven项目

Maven 项目的核心是 pom.xml。
POM (Project Object Model,项目对象模型)定义了项目的基本信息,用于描述项目如何构建,声明项目依赖等等。

你需要提前知道一些Maven 的约定:

1、在项目的根目录中放置 pom.xml
2、在 src/main/java 目录中放置项目的主代码
3、在 src/test/java 中放置项目的测试代码

假设我们有个项目叫helloworld,我们需要把他构建成为一个maven工程

步骤一:在任意目录新建文件夹ch

步骤二:在ch下新建文件 pom.xml

<?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/maven-v4_0_0.xsd">

<modelVersion>4.0.0</modelVersion>
<groupId>com.juvenxu.mvnbook</groupId>
<artifactId>hello-world</artifactId>
<version>1.0-SNAPSHOT</version>
<name>Maven Hello World Project</name>

</project>

文件详解:

代码的第一行是 XML 头,指定了该 xml 文档的版本和编码方式。

紧接着是 project 元素, project 是所有 pom.xml 的根元素,它还声明了一些 POM相关的命名空间及xsd元素,虽然这些属性不是必须的,但使用这些属性能够让第三方工具(如 IDE 中的 XML 编辑器) 帮助快速编辑 POM。

根元素下的第一个子元素 modelVersion 指定了当前 POM 模型的版本,对于 Maven2 及 Maven 3 来说,它只能是 4.0.0。

这段代码中最重要的是 groupId,artifactId 和 version 三行。这三个元素定义了一个项目基本的坐标,在 Maven 的世界,任何的 jar、pom 或者 war 都是以基于这些基本的坐标进行区分的。

A、groupId 定义了项目属于哪个组。命名规范:com.公司名称.项目名称
B、artifactId 定义了当前 Maven 项目在组中唯一的 ID。如项目分层为mvc时

groupId为com.juvenxu.mvnbook
artifactId 可以为action/service/web-app
这样就将mvc的三个层次分成了三个maven项目,三个坐标。当为其他系统提供本系统的服务时,可以直接把service的坐标告诉其他系统,TA就能调用我们的系统服务了。

C、version 指定了 Maven 项目当前的版本
D、元素声明了一个对于用户更为友好的项目名称

步骤三:编写主代码

项目的主代码会被打包到最终的构件中(比如 jar),默认情况下,Maven 假设项目主代码位于 src/main/java 目录,我们遵循 Maven 的约定,创建该目录,然后在该目录下创建文件 com/juvenxu/mvnbook/helloworld/HelloWorld.java

Hello World 的主代码:

package com.juvenxu.mvnbook.helloworld;

public class HelloWorld {
public String sayHello() {
return "Hello Maven";
}

public static void main(String[] args) {
System.out.print( new HelloWorld().sayHello() ); }
}

注意两点:
1、默认遵循Maven约定把项目主代码放到src/main/java/目录下而无须额外的配置。
Maven 会自动搜寻该目录找到项目主代码。

2、一般来说,项目中 Java 类的包都应该基于项目的 groupId 和 artifactId,这样更加清晰,更加符合逻辑,也方便搜索构件或者 Java 类。

步骤四:使用maven进行编译

mvn clean
mvn compile

clean 告诉 Maven 清理输出目录 target/
compile 告诉 Maven 编译项目主代码

步骤五:为maven项目添加jar/pom等依赖

项目和项目间并不是独立的,有时候我们的项目需要依赖于第三方的一些组件进行开发。比如我们现在要测试项目,以前的做法是下载junit.jar文件放在项目的WEB_INF的lib目录下,然后添加到build-path。
有了maven之后,通过在pom文件中配置项目依赖来引入和使用junit.jar

pom.xml配置清单

<?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/maven-v4_0_0.xsd">

<modelVersion>4.0.0</modelVersion> <groupId>com.juvenxu.mvnbook</groupId>
<artifactId>hello-world</artifactId>
<version>1.0-SNAPSHOT</version>
<name>Maven Hello World Project</name>

<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.7</version>
<scope>test</scope>
</dependency>
</dependencies>

</project>

代码中添加了dependencies元素,该元素下可以包含多个dependency元素以声明项目的依赖,这里我们添加了一个依赖:
groupId是junit,artifactId是junit,version是 4.7,scope 为依赖范围,默认值为compile,表示该依赖对主代码和测试代码都有效,若声明为test,则表示只对测试代码有效。

有了这段声明,Maven就能够自动下载junit-4.7.jar。
下载方式:自动访问中央仓库
(http://repo1.maven.org/maven2/),下载junit-4.7.jar。
下载完毕之后,以后凡是需要使用junit的maven项目就公用这个jar,而不会再去中央仓库重复下载。

下载的jar包的存放位置:
~/.m2/repository/groupId/artifactId/version
~/.m2/repository/junit/junit/4.7

这个路径下有如下的文件

junit-4.7-sources.jar(以及sources-jar的md5和sha1文件)
junit-4.7.jar(以及jar的md5和sha1文件)
junit-4.7.pom(以及pom的md5和sha1文件)

步骤六:编写测试类并执行mvn的测试命令
在src/test/java路径下编写测试类TestHelloWorld.java
编写好了之后执行mvn clean test 命令

注意:在Maven执行测试(test)之前,它会先自动执行项目主资源处理,主代码编译,测试资源处理,测试代码编译等工作,这是 Maven 生命周期的一个特性。

在执行完毕命令之后,必然出错。因为:由于历史原因,Maven 的核心插件之一 compiler 插件默认只支持编译Java 1.3,因此我们需要配置该插件使其支持 Java5

代码:配置 maven-compiler-plugin 支持 Java 5

<project>
...
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
</plugins>
</build>
...
</project>

步骤七:项目打包和运行

默认打包类型为jar,且Maven 会在打包之前执行编译、测试等操作。

简单地执行命令 mvn clean package 进行打包,成功则提示信息:

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO] [jar:jar {execution: default-jar}]
[INFO] Building jar: D:\code\hello-world\target\hello-world-1.0-SNAPSHOT.jar
[INFO] BUILD SUCCESSFUL

步骤八,在其他项目中使用构建的jar

至此,我们得到了项目的输出,复制这个 jar 文件到其他项目的 classpath 中从而使用 HelloWorld 类。

但是,如何才能让其他的Maven项目直接引用这个jar?也就是如何将其放入中央仓库呢?
我们还需要一个安装的步骤。执行 mvn clean install:

[INFO] [jar:jar {execution: default-jar}]
[INFO] Building jar: D: \code\hello-world\target\hello-world-1.0-SNAPSHOT.jar
[INFO] [install:install {execution: default-install}]
[INFO]
Installing
D:\code\hello-world\target\hello-world-1.0-SNAPSHOT.jar
to
C:\Users\juven\.m2\repository\com\juvenxu\mvnbook\hello-world\1.0-SNAPSHOT\hello- world-1.0-SNAPSHOT.jar
[INFO] BUILD SUCCESSFUL

从输出我们看到该任务将项目输出的 jar 安装到了 Maven 本地仓库中,我们可以打开相应的文件夹看到 Hello World 项目的 pom 和 jar。

只有构件被下载到本地仓库 后,才能由所有 Maven 项目使用,这里是同样的道理,只有将 Hello World 的构件安装到 本地仓库之后,其他 Maven 项目才能使用它。

拓展:上面我们采用了手工的方式来创建pom以及项目层次结构目录。这样在项目的实际开发中是很复杂的。
所幸 maven提供了 maven archetype 来创建该项目的骨架

1、离开当前maven项目目录
2、运行命令:(实际上是在运行插件 maven-archetype-plugin)
Maven3运行:mvn archetype:generate
Maven2运行:mvn org.apache.maven.plugins:maven-archetype-plugin:2.0-alpha-5:generate
3、选择一个archetype版本(这里直接回车)
4、输入要创建项目 的 groupId、artifactId、version、以及包名 package

[maven] 实战笔记 - 构建、打包和安装maven的更多相关文章

  1. [maven] 实战笔记 - maven 安装配置

    1.下载地址http://maven.apache.org/download.html 2.windows下安装maven(1)下载 apache-maven-3.0-bin.zip 解压到任意目录下 ...

  2. Maven项目构建利器02——安装Maven核心程序

    1.Maven也是用Java编写的工具,同样运行在JVM上,所以我们在安装Maven之前需要确保已经安装了JDK,首先来检查电脑上是否安装JDK. 2.如上图说明电脑中已经安装了JDK,下面就要去官网 ...

  3. maven -- 学习笔记(一)之maven环境搭建

    首先先感谢博主的分享http://www.cnblogs.com/yjmyzz/p/3495762.html 基本概念: Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建 ...

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

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

  5. Maven使用笔记(六)使用Maven进行多模块拆分

    模块拆分是Maven经常使用的功能,简单梳理一下如何使用Maven进行多模块拆分, 只做归纳总结,网上资料很多,不再一步一步实际创建和部署. >>建立Maven多模块项目 一个简单的Jav ...

  6. 《Maven实战》第10章 使用Maven进行测试

    10.2maven-surefire-plugin插件 [生命周期]的[阶段]与[插件]的[目标]绑定 default生命周期的test阶段:使用单元测试框架运行测试 Maven内置绑定:defaul ...

  7. Eclipse使用Maven内置插件不需要安装Maven

    首先修改eclipse项目中maven的路径,默认在C盘,修改路径例如 在d盘创建文件夹-D:- |---m2 |--repository |--setting.xml 没有文件夹和文件要自己新建,如 ...

  8. 项目管理利器maven学习笔记(一):maven介绍及环境搭建

    maven介绍 maven下载与环境搭建 http://maven.apache.org/download.cgi# 解压到指定位置,比如我解压到D盘 设置maven环境变量 添加一个变量名,变量值为 ...

  9. 学习笔记——Maven实战(六)Gradle,构建工具的未来?

    Maven面临的挑战 软件行业新旧交替的速度之快往往令人咂舌,不用多少时间,你就会发现曾经大红大紫的技术已经成为了昨日黄花,当然,Maven也不会例外.虽然目前它基本上是Java构建的事实标准,但我们 ...

随机推荐

  1. python 字符串的反转

    def string_reverse(str1): rstr1 = '' index = len(str1) : rstr1 += str1[ index - ] index = index - re ...

  2. python 去除字符串两端的引号

    a='"srting"' print(a) b=eval(a) print(b) 输出 "srting" srting

  3. 动态规划-Stock Problem

    2018-04-19 19:28:21 股票问题是leetcode里一条非常经典的题目,因为其具有一定的现实意义,所以还是在数学建模方面还是有很多用武之地的.这里会对stock的给出一个比较通用的解法 ...

  4. Java Spring-AspectJ

    2017-11-10 21:25:02 Spring的AspectJ的AOPAspectJ 是一个面向切面的框架,它扩展了 Java 语言. AspectJ 定义了 AOP 语法所以它有一个专门的编译 ...

  5. PythonInstaller编译EXE方法+编译过程出错方案大全

    https://www.cnblogs.com/gopythoner/p/6337543.htmlhttps://www.zhihu.com/question/22963200https://blog ...

  6. Android 之WebView实现下拉刷新和其他相关刷新功能

    最近项目中需要用到WebView下拉刷新的功能,经过查找资料终于完成了此功能,现在拿出来和大家分享一下.希望对大家有所帮助. 效果如下图:   代码: activity.xml <?xml ve ...

  7. 牛客网——E进阶吧阶乘

    链接:https://www.nowcoder.net/acm/contest/75/E来源:牛客网 时间限制:C/C++ 3秒,其他语言6秒 空间限制:C/C++ 32768K,其他语言65536K ...

  8. 101. Symmetric Tree -- 判断树结构是否对称

    Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center). For e ...

  9. Windows 7 IIS7.5上部署MVC实例

    这段时间在用MVC写一个导游网站,在Window7上部署的时候,遇到和处理了一些问题. 现将完整的过程整理出来,供大家参考: 一.部署准备: 1.安装Microsoft .net FrameWork ...

  10. docker部署mysql

    1. 下载 [root@localhost my.Shells]# ./dockerStart.sh start or stop start Redirecting to /bin/systemctl ...