maven02-----Maven项目构建的初次使用

 一. 创建Maven项目

1.1 建立一个Hello项目

当然也可以通过java project的方式创建符合Maven约定的目录结果的项目,并手动建立pom.xml文件,但是太繁琐了。因此,这里直接建立maven项目。note: eclipse有内建的maven项目创建功能,倘若不喜欢,可以装一些差插件,使用原理是一样的。

创建好以后会如下目录结构:

实际上,可能还需要创建一些resources文件夹,类似如下目录结构:

创建过程中的groupId,artifact id,version等,后面会详细介绍。

  • groupId: 定义了项目属于哪个组,这个组往往和项目所在的组织或公司有关。比如在googlecode上建立了一个名为myapp的项目,那么groupId就应该是com.googlecode.myapp
  • artifactId:定义了当前maven项目在组中唯一的ID
  • version:制定了项目当前的版本,snapshot意为快照,说明该项目还处于开发中,是不稳定的版本。

(1) 在src/main/java/com.test.hello包下新建立一个类Hello.java

package com.test.hello;public class Hello {public String sayHello(String name) {return "Hello "+name+"!";}}

(2) 在src/test/java/com.test.hello下创建一个HelloTest.java

package com.test.hello;import org.junit.Test;import junit.framework.Assert;public class HelloTest {@Testpublic void testHello() {Hello hello=new Hello();String results=hello.sayHello("Hermioner");Assert.assertEquals("Hello Hermioner!", results);}}

1.2 使用Maven编译、清理、测试、打包项目

(1)使用Maven编译项目,编译项目的命令是:“mvn compile

打开cmd命令行,进入Hello项目根目录执行“mvn compile"命令编译项目的java类

note:执行了这个命令后,会下载一些依赖包到maven repository中(本地仓库中),方便下次直接从这里读取已经下载了的依赖包。因为,我们的测试中用到了junit,因此,第一次使用的话,本地仓库没有,需要到中央仓库取下载对应的Junit的jar包到本地仓库。

比如:

编译成功之后,可以看到hello项目的根目录下多了一个【target】文件夹,这个文件夹就是编译成功之后Maven帮我们生成的文件夹,如下图所示:

打开【target】文件夹,可以看到里面有一个【classes】文件夹,如下图所示:

【classes】文件夹中存放的就是Maven我们编译好的java类,如下图所示:

这就是使用Maven自动编译项目的过程。

(2)使用Maven清理项目,清理项目的命令是:mvn clean“

进入Hello项目根目录执行"mvn clean"命令清理项目,清理项目的过程就是把执行"mvn compile"命令编译项目时生成的target文件夹删掉,如下图所示:

(3) 使用Maven测试项目,测试项目的命令是:”mvn test"

进入Hello项目根目录执行"mvn test"命令测试项目,如下图所示:

测试成功之后,可以看到hello项目的根目录下多了一个【target】文件夹,这个文件夹就是测试成功之后Maven帮我们生成的文件夹,如下图所示:

打开【target】文件夹,可以看到里面有一个【classes】和【test-classes】文件夹,如下图所示:

也就是说,我们执行执行"mvn test"命令测试项目时,Maven先帮我们编译项目,然后再执行测试代码。

(4)使用Maven打包项目,打包项目的命令是:"mvn package"

  进入Hello项目根目录执行"mvn package"命令测试项目,如下图所示:

打包成功之后,可以看到hello项目的根目录下的【target】文件夹中多了一个Hello-0.0.1-SNAPSHOT.jar,这个Hello-0.0.1-SNAPSHOT.jar就是打包成功之后Maven帮我们生成的jar文件,如下图所示:

5、使用Maven部署项目,部署项目的命令是:"mvn install"

note: 必须执行mvn install才可以让别的maven项目引入这个jar,因为只有将构建下载到本地仓库以后,才可以让所有的maven项目使用。同理,只有将hello项目的构建安装到本地仓库,其它maven项目才可以使用。

进入Hello项目根目录执行"mvn install"命令测试项目,如下图所示:

安装成功之后,首先会在hello项目的根目录下生成【target】文件夹,打开【target】文件夹,可以看到里面会有Hello-0.0.1-SNAPSHOT.jar,这个Hello-0.0.1-SNAPSHOT.jar就是安装成功之后Maven帮我们生成的jar文件,如下图所示:

除此之外,在我们存放Maven下载下来的jar包的仓库也会有一个Hello-0.0.1-SNAPSHOT.jar,所以Maven安装项目的过程,实际上就是把项目进行【清理】→【编译】→【测试】→【打包】,再把打包好的jar放到我们指定的存放jar包的Maven仓库中,如下图所示:

所以使用"mvn install"命令,就把maven构建项目的【清理】→【编译】→【测试】→【打包】的这几个过程都做了,同时将打包好的jar包发布到本地的Maven仓库中,所以maven最常用的命令还是"mvn install",这个命令能够做的事情最多。

1.2 组合使用Maven的命令

maven的编译,清理,测试,打包,部署命令是可以几个命令同时组合起来使用的,常用的命令组合如下:

  (1)先清理再编译:"mvn clean compile",如下所示:

还有的就是"mvn clean test","mvn clean package","mvn clean install",这些组合命令都比较常用。

  以上就是关于Maven构建项目的各个个过程演示。

note:项目的主代码会被打包到最终的构建中(如jar),而测试代码只能在运行测试时用到,不会被打包。

1.3 mvn命令的添加

我们选中maven项目或者pom.xml文件以后,点击右键run as---会出现一些mvn命令。如果我们不满足于这些,我们可以自己添加,让它出现在run as的可选菜单中。

也可以通过选择maven build,在弹出的对话框中添加想要使用的命令。

 

二. 在别的项目中使用通过Maven安装生成的项目的jar包

在上面,我们使用mvn install命令将hello这个项目打包成了Hello-0.0.1-SNAPSHOT.jar包并且发布到本地的maven仓库E:\repository\me\gacl\maven\Hello\0.0.1-SNAPSHOT中,下面我们来看看如何在别的项目中使用Hello-0.0.1-SNAPSHOT.jar

2.1 方法一

直接在pom.xml文件中配置hello项目打包生成jar包,即:

2.2 方法2

在根目录下新建立一个lib文件夹,将hello的jar包粘贴进来,并build path进来,这样就可以使用hello项目中的东西拉。

 三. 通过eclipse创建maven项目的底层实现原理简介

在通过eclipse创建maven项目时,实际上还是采用的archetype生成了项目骨架。

 

 执行相关的archetype命令,就可以创建出上面目录结构的maven项目拉。

3.1 pom.xml文件

通过Maven构建的JavaProject,在项目的根目录下都会存在一个pom.xml文件,进入myapp目录,可以看到有一个pom.xml文件,这个文件是Maven的核心。如下图所示:

  

    1、pom意思就是project object model。

    2、pom.xml包含了项目构建的信息,包括项目的信息、项目的依赖等。

    3、pom.xml文件是可以继承的,大型项目中,子模块的pom.xml一般都会继承于父模块的pom.xml

  pom.xml文件的内容如下:

 1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 2   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 3   <modelVersion>4.0.0</modelVersion>
 4 
 5   <groupId>com.mycompany.app</groupId>
 6   <artifactId>myapp</artifactId>
 7   <version>1.0-SNAPSHOT</version>
 8   <packaging>jar</packaging>
 9 
10   <name>myapp</name>
11   <url>http://maven.apache.org</url>
12 
13   <properties>
14     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
15   </properties>
16 
17   <dependencies>
18     <dependency>
19       <groupId>junit</groupId>
20       <artifactId>junit</artifactId>
21       <version>3.8.1</version>
22       <scope>test</scope>
23     </dependency>
24   </dependencies>
25 </project>

pom.xml文件的节点元素说明:

  •     <project>       pom文件的顶级节点
  •     <modelVersion>     object model版本,对Maven2和Maven3来说,只能是4.0.0 
  •     <groupId>       项目创建组织的标识符,一般是域名的倒写
  •     <artifactId>      定义了项目在所属组织的标识符下的唯一标识,一个组织下可以有多个项 目
  •     <version>        当前项目的版本,SNAPSHOT,表示是快照版本,在开发中
  •     <packaging>      打包的方式,有jar、war、ear等
  •     <name>        项目的名称
  •     <url>          项目的地址
  •     <properties>    属性配置,比如:<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  •     <dependencies>     构建项目依赖的jar

  其中由groupId、artifactId和version唯一的确定了一个项目坐标

 

 

 

参考文献:

《Maven实战》

https://www.cnblogs.com/xdp-gacl/p/4051690.html

转载于:https://www.cnblogs.com/Hermioner/p/10247214.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/450187.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微软超过苹果 成为全球第一大市值公司

11月23日周五盘中至收盘&#xff0c;微软市值正式超过苹果&#xff0c;成为世界上市值最高的公司。收盘时&#xff0c;微软市值为7533.4亿美元&#xff0c;苹果市值为7468.2亿美元&#xff0c;亚马逊市值为7366.2亿美元&#xff0c;谷歌市值为7255.2亿美元。 上次苹果与微软市值…

创新大赛成就创业梦想 超30%入榜应用获投资意向

摘要&#xff1a;腾讯开放平台宣布移动应用赛区正式开启&#xff0c;新一轮的创业梦想正在成长中。据悉&#xff0c;在腾讯开放平台应用创新大赛中诞生了多款DAU&#xff08;日活跃用户数&#xff09;超百万的应用。小鱼吃吃吃、开心泡泡猫等引领社交游戏潮流&#xff0c;视频达…

如何判断软件架构的好与坏

判断一个软件的架构的好与坏有很多方法&#xff0c;不过如果让我一句话来描述的话&#xff1a; 如果一个软件开发程度在70%以上的情况下&#xff0c;加入一个新功能&#xff0c;还需要涉及到大量的文件&#xff0c;代码的修改&#xff0c;那么这个软件架构一定很烂&#xff0c;…

网关(Gateway)详解

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 网关(Gateway)又称网间连接器、协议转换器。网关在网络层以上实现网络互连&#xff0c;是最复杂的网络互连设备&#xff0c;仅用于两个高…

【重点突破】—— React实现富文本编辑器

前言&#xff1a;富文本编辑器Rich Text Editor, 简称 RTE, 是一种可内嵌于浏览器&#xff0c;所见即所得的文本编辑器。 一、安装插件 react-draft-wysiwyg&#xff1a; 文本编辑器插件 draftjs-to-html&#xff1a;文本转换为html的插件 yarn add react-draft-wysiwyg draftj…

1106: 回文数(函数专题)

题目描述 一个正整数&#xff0c;如果从左向 右读&#xff08;称之为正序数&#xff09;和从右向左读&#xff08;称之为倒序数&#xff09;是一样的&#xff0c;这样的数就叫回文数。输入两个整数m和n&#xff08;m<n)&#xff0c;输出区间[m&#xff0c;n]之间的回文数。 …

Ubuntu 12.10 正式发布

Canonical今天正式发布了Ubuntu 12.10版本&#xff0c;代号为“Quantal Quetzal”&#xff0c;意为量子绿咬鹃&#xff0c;绿咬鹃是一种生活在美洲的颜色极为鲜艳的鸟。Ubuntu的版本代号一直都这么奇怪。 在该版本中&#xff0c;改进了Unity桌面环境&#xff0c;弱化了本地应用…

Hibernate中1+N问题以及解决方法

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. Hibernate中的1N问题描述 在多对一关系中&#xff0c;当我们需要查询多的一方对应的表的记录时&#xff0c;可以用一条sql语句就能…

Android应用开发—通用的GridView网格分割线

注&#xff1a;本文基于 Android RecyclerView 使用完全解析 体验艺术般的控件 中关于GridView网格分割线部分代码扩展而来。 原接口代码&#xff1a; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas; import andro…

hdfs部署

一、下载Hadoop 2.6.0-cdh5.7.0的tar.gz包并解压&#xff1a; wget http://archive.cloudera.com/cdh5/cdh/5/hadoop-2.6.0-cdh5.7.0.tar.gz tar -zxvf hadoop-2.6.0-cdh5.7.0.tar.gz cd /usr/local/hadoop-2.6.0-cdh5.7.0/ ls bin bin-mapreduce1 cloudera etc examples …

JVM技术周报第2期

JVM技术周报第2期 JVM技术周报分享JVM技术交流群的讨论内容&#xff0c;由群内成员整理归纳而成。如果你有兴趣入群讨论&#xff0c;请关注「Java技术精选」公众号&#xff0c;通过右下角菜单「入群交流」加我好友&#xff0c;获取入群详情。 1、如何阅读源码&#xff1f; 在我…

最长重复子串和最长不重复子串求解

最长重复子串和最长不重复子串求解 本文内容框架&#xff1a; 1 最长重复子串 基本方法、KMP算法求解、后缀数组求解 2 最长不重复子串 基本方法、动态规划、动态规划Hash 3 小结 1最长重复子串 1.1问题描述 首先这是一个单字符串问题。子字符串R 在字符串L 中至少出现两…

sql 查询结果为null替换 为 0

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 mysql : ifnull( xxx , 0 ) select ifnull(colname,0) from tablename oracle: NVL&#xff08;xxx , 0 )

前后端分离——token超时刷新策略

前言 记录一下前后端分离下————token超时刷新策略&#xff01; 需求场景 昨天发了一篇记录 前后端分离应用——用户信息传递 中介绍了token认证机制&#xff0c;跟几位群友讨论了下&#xff0c;有些同学有这么一个疑惑&#xff1a;token失效了&#xff0c;应该怎么做&…

Android ImageView的scaleType(图片比例类型)属性与adjustViewBounds(调整视图边界)属性

本文转载自[Android ImageView的scaleType&#xff08;图片比例类型&#xff09;属性与adjustViewBounds&#xff08;调整视图边界&#xff09;属性]并做了排版的修改(http://www.cnblogs.com/xzbc/p/5098347.html) Android ImageView的scaleType的属性可设置为matrix&#xff…

阿里云@广东:让我们一起上云!

锅炉故障预测 预警准确率95%以上 利用算法模型进行制程能力的 综合分析与评估优化 提升定标效率 时间降低30% 构建垃圾焚烧发电工艺的优化算法模型 综合考虑环保和设备负荷因素 推荐最优工艺参数组合 优化人工操作&#xff0c;提高燃烧效率 中海油能源发展公司 石油钻探预测优化…

程序员的自我经营

程序员的自我经营之道第一层 从你决定迈出校门进入社会的那一刻起&#xff0c;你就进入了一个战场&#xff0c;这个战场虽然没有硝烟弥漫&#xff0c;没有炮火纷飞&#xff0c;但却绝不亚于任何一个真正的战场。你要在这个战场上去搏杀&#xff0c;去竞争&#xff0c;利用各种…

P3966 [TJOI2013]单词

\(\color{#0066ff}{ 题目描述 }\) 小张最近在忙毕设,所以一直在读论文。一篇论文是由许多单词组成但小张发现一个单词会在论文中出现很多次,他想知道每个单词分别在论文中出现了多少次。 \(\color{#0066ff}{输入格式}\) 第一行一个整数N,表示有N个单词。接下来N行每行一个单词,…

Android应用开发—RecyclerView绘制蒙层

背景&#xff1a;如何在跨越两个或两个以上的item绘制一个view&#xff0c;该view需要跟随recyclerView的滑动而整体移动。 Overridepublic void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state) {super.onDrawOver(c, parent, state);final View child …