maven+springboot项⽬使⽤idea打包
⾸先简单了解⼀下maven:
概述
⽇常开发中,我们⽤到的maven相关功能⼤概以下⼏种:
1、管理jar依赖
2、构建项⽬(打包、编译等)
3、发布项⽬(共享、上传⾄服务器,供他⼈使⽤)
简单介绍:
1、管理依赖
jar⼀般在l⽂件的中配置,以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> </
这⾥在artifactId中重复定义了本该属于groupId的内容,所以这样对于项⽬发布来说是不规范的。
2、依赖在哪:
在步骤1 中,编译会将本地*.java编译为字节码⽂件,其中很多jar依赖于第三⽅类库,这时候IDE会根据已配置的 maven\conf\下的l⽂件中的配置(或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的命令更加简洁易⽤。
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 -st.skip=true
然后在有main⽅法的项⽬编译后的target下main到war包例如:ctuom-web-201803020954.war(需要修改为ctuom-web.war),然后把war包放在tomcat⽬录的webapps下⾯解压,
启动tomcat下bin⾥⾯的startup,访问:http:localhost:8080/ctuom-web/ 就可以访问了
maven打包本地jar包2、在Springboot的应⽤的根⽬录下运⾏mvn spring-boot:run
3、使⽤mvn install ⽣成jar后运⾏
先到项⽬根⽬录mvn install cd targetjava -jar xxxx.jar
最直接的打包⽅式:
1. 在idea project maven栏中,点开profiles,进⾏选择配置⽂件类型
2. 在相应的项⽬下点开,进⾏clean-----》package-----》install
3. 到本地磁盘相应位置或者项⽬下的target下查看jar包
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论