首先简单了解一下maven:

概述

日常开发中,我们用到的maven相关功能大概以下几种: 
1、 管理jar依赖 
2、 构建项目(打包、编译等) 
3、 发布项目(共享、上传至服务器,供他人使用)

简单介绍:

1、管理依赖

jar一般在pom.xml文件的中配置,以spring core为例,一般格式如下:

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.1.1.RELEASE</version>
</dependency>

其中groupId一般为项目(jar war pom等)的发布机构名称; 
artifactId为项目名称; 
version为项目版本; 
在项目编译打包的时候,ide会自动到maven仓库去查找相应的jar文件,打包并存放在项目的相应路径下(如web项目的lib目录下) 
(关于依赖的各个名称和写法,请见后文:详细说明–依赖说明)

2、构建项目:

这里所说的构建项目主要指打包、编译、运行测试用例等操作,即maven的生命周期中的打包过程。 
最常用的就是compile了,一般项目修改代码以后都要重新编译,然后加载到tomcat中运行调试。 
其它的还有clean、package等比较常用的操作,请见详细说明–生命周期部分

3、发布项目:

如果我们写一些通用框架,或者自己封装了一些常见的工具类,想要打包为jar并且供他人使用,那么我们可以通过maven发布到公共仓库(私服)供他人下载依赖使用。 
比如每个公司都会有自己的框架,持久层、控制层或者其它功能等。当我们没有使用maven的时候,我们是直接把别人的jar拷贝到项目的library目录下,而现在我们有了maven就不用自己到处拷贝jar包了,只需要在发布的时候找到别人发布到仓库时候写的groupId artifactId version等信息就能直接添加依赖了,也就是相当于第一步的依赖管理。

4、多模块

maven实际上通过多模块的思想来组织依赖的,每一个项目或者jar都是一个模块,我们可以把一些通用的,不常变动的东西写在一些指定的模块下,在另外一个项目中引用依赖(这里就有点类似【1、依赖管理】,这样一来可以让项目结构更清晰、方便别人依赖使用,如果项目都是一个模板,也可以复用等等,还有其它各种好得自己摸索感受吧)

详细说明:

1、依赖名称:

这里要注意,在我们自己发布项目时尽量遵守以上规范,否则当别人搜索依赖时会写的很冗余很混乱,这也是很多私服中不断重复上传相同jar会导致项目出错的原因。 
正常来说,一个项目(如spring的jar)应该是机构、名称和版本唯一的,当我们引用时,可以通过这三个参数唯一标识出一个项目,在上传这些项目的时候,很多人喜欢在artifactId中写上本该属于groupId的内容,这其实是不合理的。 
举个错误写法例子:

<dependency>
<groupId>org.springframework</groupId>
<artifactId> org.springframework .spring-core</artifactId>
<version>4.1.1.RELEASE</version>
</dependency>

这里在artifactId中重复定义了本该属于groupId的内容,所以这样对于项目发布来说是不规范的。

2、依赖在哪:

因为我们安装maven是要配置maven主程序目录、maven配置文件目录、maven仓库目录这三个路径的(可能ide会有自动配置,但这三个都是必不可少的) 
maven主程序也就是我们下载的maven插件的根目录; 
maven配置文件路径就在maven主程序目录\conf\下,默认名为setting.xml; 
maven仓库目录也就是maven自动下载jar所存放的目录以及我们项目发布的本地目录。 
当我们编译项目时一般会有如下过程: 
1)编译 
2)找到pom文件,并扫描相关依赖 
3)根据pom中依赖配置信息,到本地maven仓库去查找jar包 
4)如果本地没有jar,maven会到它的中心仓库下载jar( 
1. http://www.sonatype.org/nexus/ 
2. http://mvnrepository.com/) 
5)如果你公司创建了私服,并且你的maven中做了配置,那么在本地没有找到jar包时,会根据maven的配置文件(conf/setting.xml)所配置的地址,到maven的私服仓库去寻找jar,私服也会根据它的配置规则在本地或中央仓库查找jar,如果本地没有就从服务端下载到本地。(私服的优点见下文)

在步骤1 中,编译会将本地*.java编译为字节码文件,其中很多jar依赖于第三方类库,这时候IDE会根据已配置的 maven\conf\下的setting.xml文件中的配置(或IDE的maven仓库路径)去查找相应jar包。如果有jar包,则会拷贝到项目的编译目录下(myEclipse默认为“tomcat\webapp\lib\”目录下;Intellij IDEA 默认在“项目target\webapps\lib”目录下), 
如果本地没有,那么会先去仓库下载到本地,再从本地拷贝到项目编译目录。 
其它的下载过程最终也会下载到本地并拷贝到编译目录,更多详情就不多解释了,可自行学习。

3、生命周期:

maven将项目的生命周期大致分为9个,分别为:clean、validate、compile、test、package、verify、install、site、deploy 
我经常用的也就是clean、compile、package、install、deploy,而且deploy相对也较少,因为很少发布公共的项目供别人依赖使用,基本也就是项目打包为war时候会打包到私服,运维人员可以到私服上直接下载对应版本。 
其中clean即清除项目中编译文件和本地仓库中已打包的文件(即本地install的文件,install后面讲到) 
compile即编译项目中的java文件,并存放在项目的编译目录(根据不同的配置,编译目录也不一样) 
test 即运行项目中的测试用例文件,如果测试用例未通过,也会打包失败,另,这里的test过程可以在pom中通过配置跳过。(想想也是,我项目都好了,其实不是非要跑测试用例的) 
package 即将本地编译好的文件打包为war 或者jar(这是最常见的两种,其他相关自行了解) 
verify 我很少用到,没怎么了解过 
install 将打包的代码存放到本地maven仓库,可供本地其它项目依赖使用 
site生成项目报告,站点,发布站点,这个也很少用到,不是很清楚 
deploy 将打包在本地仓库中的项目发不到服务器,供他人依赖使用 
详细生命周期自行学习了解。

maven在执行一个生命周期的命令的是时候将会执行之前的所有生命周期操作,比如执行mvn install,会执行前面一系列的动作包括 compile , package , test 等,具体请查看maven的官方文档。这个特性使maven的命令更加简洁易用。

4、私服的优点

在上述过程中,私服的作用相当于本地的maven仓库,但它同时又作为服务器的角色来为局域网用户提供jar下载,在很多开发环境中,开发机器是不允许连接互联网的,所以这时候maven就不能正常访问中央仓库下载jar文件,所以这里的私服仓库就显得尤为重要了。私服所在服务器提供了同时访问内网和互联网的功能,当用户找不到jar包依赖时,可以通过内网访问私服服务器,如果私服没有,那么私服会通过互联网去中央仓库或其它仓库下载,这样可以一定程度上保证开发环境的安全性。 
另一方面局域网的访问速度普遍是比互联网快的,如果在本地没有jar,当局域网用户下载jar包且私服没有时,私服的带宽比较大便可以更快速的下载到jar并回传到开发者本地,这样可以保证在复杂的网络环境或网络不通畅的时候依然可以使用maven相关的功能。并且,当局域网中有用户下载了相应jar包后,其它用户再次需要该jar包时私服仓库便可以直接从私服服务器本地直接通过局域网发送给局域网用户,这样大大减少了带宽、流量并解决了很多由于网络环境导致的问题。

由于平时接触的jar war比较多,文中很多地方对依赖或者项目打包都简单以jar来说明,其实那些jar不单是指jar包文件,还可以是war、pom、或者项目目录结构打包的相关类型的文件,为了便于理解暂用jar来说明,待知识体系再完善还会进一步修改哈。

1、 tomcat启动:

IDEA 打包配置:

mvn clean package -DskipTests

或者

mvn clean package -Dmaven.test.skip=true

然后在有main方法的项目编译后的target下main找到war包例如:ctuom-web-201803020954.war(需要修改为ctuom-web.war),然后把war包放在tomcat目录的webapps下面解压,

启动tomcat下bin里面的startup,访问:http:localhost:8080/ctuom-web/ 就可以访问了

2、 在Springboot的应用的根目录下运行mvn spring-boot:run

3、使用mvn install 生成jar后运行

先到项目根目录
mvn install
cd target
java -jar xxxx.jar

maven+springboot项目使用idea打包的更多相关文章

  1. SpringBoot项目如何进行打包部署

    springboot的打包方式有很多种.有打成war的,有打成jar的,也有直接提交到github,通过jekins进行打包部署的.这里主要介绍如何打成jar进行部署.不推荐用war,因为spring ...

  2. SpringBoot项目搭建与打包

    一.环境准备 本地java环境jdk1.8 Maven版本3.5.2 IDE工具idea2017 二.SpringBoot微服务搭建 1.点击File >> New >> Pr ...

  3. IDEA上创建 Maven SpringBoot项目发布到Tomcat

    概述 上篇记录了IDEA上创建Maven SpringBoot+mybatisplus+thymeleaf 项目,但是如何将SpringBoot发布到Tomcat,直接采用Maven 命令Clear- ...

  4. 使用Eclipse对SpringBoot项目如何进行打包部署

    1,打包概要介绍: 自己做了个小demo,突然想练一下如何打包发布,期间出现了两个错误,第一个是加载不到主类,第二个是加载不到jsp文件,一会会把这两个问题一一陈述,以及解决方法. 1.1,先检查po ...

  5. docker 运行jenkins及vue项目与springboot项目(五.jenkins打包springboot服务且在docker中运行)

    docker 运行jenkins及vue项目与springboot项目: 一.安装docker 二.docker运行jenkins为自动打包运行做准备 三.jenkins的使用及自动打包vue项目 四 ...

  6. IDEA快速创建Maven+SpringBoot项目时:Cannot download https://start.spring.io;Status:403

    先展示一下我遇到的问题: 用浏览器搜索是有页面的,但是但是但是呢,用IDEA快速构建的时候就报403 咳咳!巴格虐我万千遍,我待技术如初恋... 我看到的解决办法有以下两种,当然,我只想说:" ...

  7. springBoot 项目 jar/war打包 并运行

    一:idea  打jar  包 简述:springboor  项目最好的打包方式就是打成jar  ,下边就是简单的过程 1.打开idea工具 ,选着要打开的项目, 然后打开view--> too ...

  8. SpringBoot项目多模块打包与部署【pom文件问题】

    [bean的pom] [user的pom] 特别注意,user模块因为有返回jsp页面和web相关,所以需要加入web依赖. chapter23 com.yuqiyu 1.0.0 4.0.0 com. ...

  9. linux小白成长之路9————打包部署SpringBoot项目

    [内容指引] SpringBoot项目介绍: 打包SpringBoot项目: 1.pom.xml: 2.application.properties配置: 3.application-dev.prop ...

随机推荐

  1. DeDeCMS织梦的采集教程

    http://www.tuicool.com/articles/VziaEz    dede 第一步.我们打开织梦后台点击采集——采集节点管理——增加新节点 第二步.新增节点-配置网址索引 填写要采集 ...

  2. android 过USB-IF測试注意事项及改动

    USB IF本身是个自愿性的标志(logo)认证. 使用或贴有USB标志的产品都需接受这项測试.其用意是确保全部USB装置的品质都符合要求.产品接受測试的方法有两种:參加USB- IF赞助的兼容性測试 ...

  3. C++第15周(春)项目3 - OOP版电子词典(二)

    课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 [项目3-OOP版电子词典](本程序须要的相关 ...

  4. NodeJS-003-自动刷新

    修改index.js之后,发现刷新浏览器,没有任何更改,需要关闭应用重新启动. 为了避免每次修改代码后要自动重启.通过安装supervisor来监控代码修改. 安装:npm install -g su ...

  5. laravel 集合接口

    只记下几个常用的,其他的看这里:http://laravelacademy.org/post/6293.html 1)什么是集合? 就是laravel查询构建器查询返回的数据结果(get first ...

  6. (1.1.6)UVA 10978 Let's Play Magic!(直叙式模拟)

    /* * UVA_10978.CPP * * Created on: 2013年10月6日 * Author: Administrator */ #include <iostream> # ...

  7. C++虚继承的概念[转]

    C++中虚拟继承的概念 为了解决从不同途径继承来的同名的数据成员在内存中有不同的拷贝造成数据不一致问题,将共同基类设置为虚基类.这时从不同的路径继承过来的同名数据成员在内存中就只有一个拷贝,同一个函数 ...

  8. activemq 实战 四 传输连接器-Transport connectors 4.2

    In order to exchange messages, producers and consumers (clients) need to connect to the broker. This ...

  9. ICMP重定向及其攻防技术

    1.ICMP重定向概念: ICMP重定向技术,是用来提示主机改变自己的主机路由从而使路由路径最优化的一种ICMP报文.其概念理解的要义是原主机路由不是最佳路由,而其默认网关提醒主机优化自身的主机路由而 ...

  10. 电力项目十七--数据字典首页JS添加和删除表格

    知识点:jQuery是一个JavaScript函数库. JS代码: function insertRows(){ //获取表格对象 var tb1 = $("#dictTbl"); ...