maven+springboot项目使用idea打包
首先简单了解一下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打包的更多相关文章
- SpringBoot项目如何进行打包部署
springboot的打包方式有很多种.有打成war的,有打成jar的,也有直接提交到github,通过jekins进行打包部署的.这里主要介绍如何打成jar进行部署.不推荐用war,因为spring ...
- SpringBoot项目搭建与打包
一.环境准备 本地java环境jdk1.8 Maven版本3.5.2 IDE工具idea2017 二.SpringBoot微服务搭建 1.点击File >> New >> Pr ...
- IDEA上创建 Maven SpringBoot项目发布到Tomcat
概述 上篇记录了IDEA上创建Maven SpringBoot+mybatisplus+thymeleaf 项目,但是如何将SpringBoot发布到Tomcat,直接采用Maven 命令Clear- ...
- 使用Eclipse对SpringBoot项目如何进行打包部署
1,打包概要介绍: 自己做了个小demo,突然想练一下如何打包发布,期间出现了两个错误,第一个是加载不到主类,第二个是加载不到jsp文件,一会会把这两个问题一一陈述,以及解决方法. 1.1,先检查po ...
- docker 运行jenkins及vue项目与springboot项目(五.jenkins打包springboot服务且在docker中运行)
docker 运行jenkins及vue项目与springboot项目: 一.安装docker 二.docker运行jenkins为自动打包运行做准备 三.jenkins的使用及自动打包vue项目 四 ...
- IDEA快速创建Maven+SpringBoot项目时:Cannot download https://start.spring.io;Status:403
先展示一下我遇到的问题: 用浏览器搜索是有页面的,但是但是但是呢,用IDEA快速构建的时候就报403 咳咳!巴格虐我万千遍,我待技术如初恋... 我看到的解决办法有以下两种,当然,我只想说:" ...
- springBoot 项目 jar/war打包 并运行
一:idea 打jar 包 简述:springboor 项目最好的打包方式就是打成jar ,下边就是简单的过程 1.打开idea工具 ,选着要打开的项目, 然后打开view--> too ...
- SpringBoot项目多模块打包与部署【pom文件问题】
[bean的pom] [user的pom] 特别注意,user模块因为有返回jsp页面和web相关,所以需要加入web依赖. chapter23 com.yuqiyu 1.0.0 4.0.0 com. ...
- linux小白成长之路9————打包部署SpringBoot项目
[内容指引] SpringBoot项目介绍: 打包SpringBoot项目: 1.pom.xml: 2.application.properties配置: 3.application-dev.prop ...
随机推荐
- Ubuntu 12.04.3 X64 使用 NFS 作为文件共享存储方式 安装 Oracle11g RAC
nfs-server 在 Ubuntu上可以选择 : nfs-kernel-server:如果在windows上,可以选择:haneWIN NFS Server nfs-client Ubuntu上使 ...
- 移动HTML 5前端性能优化指南
概述 PC优化手段在Mobile侧同样适用 在Mobile侧我们提出三秒种渲染完成首屏指标 基于第二点,首屏加载3秒完成或使用Loading 基于联通3G网络平均338KB/s(2.71Mb/s),所 ...
- linux系统中RPM包的通用命名规则
http://blog.csdn.net/kexiuyi/article/details/53292358
- oracle客户端免安装配置、64位机器PL/SQL和VS自带的IIS连接问题
一.oracle客户端免安装配置 1.到oracle官网下载Oracle InstantClient, 把它解压缩到单独目录,例如C:\OracleClient,2. 添加环境变量 ORACLE_HO ...
- HDU - 2089 不要62 (暴力或数位DP)
Description 杭州人称那些傻乎乎粘嗒嗒的人为62(音:laoer). 杭州交通管理局常常会扩充一些的士车牌照.新近出来一个好消息.以后上牌照,不再含有不吉利的数字了.这样一来.就能够消除个别 ...
- Effective C++ Item 33 Avoid hiding inherited names
class Base { private: int x; public: ; virtual void mf2(); void mf3(); ... }; class Derived: public ...
- 浅谈 SSD,eMMC,UFS(转自知乎)
但作为一个计算机体系结构的研究生,在这些名词满天飞的时候,我的好奇心是抑制不住的,想一探这几样技术的究竟.本文不对某一特定事件进行点评,仅从技术角度分析对比一下这三种技术.就算是当做自己的技术储备+科 ...
- vue中的小踩坑(01)
前言: 昨天算是使用vue2.0+element-ui做了一点小小的页面,可是源于其中遇到的问题,特地整理一下,以防自己还有其他的小伙伴们继续踩坑. 过程: 1.不知道大家有没有注意到 ...
- vue2.0+element-ui(01简单点的单页面)
前言: 在<Vue.js权威指南>刚出版的时候,自己就作为一名前端粉捧了一把场,可是真是应了那句“出来混,总是要还的“这句话了,那时候信心满满的买来书想要认真研究,最终却还是把它搁浅了.直 ...
- 【mysql】mysql front 提示Access violation at address 010C9CD0 in module ‘mysql-front.exe’
1 错误描述: 利用mysql-front 工具新建数据库.提示了一下错误 2 解决办法: 内存越界问题,最好重新注册下Windows的动态链接库 首先“开始”—“cmd” 在打开的dos窗口中运行