简述

maven是啥我这里就不做介绍了,需要教程的可以私信我,文章主要介绍使用idea搭建maven工程

一。搭建maven服务端

通常网上说的搭建maven环境指的是搭建maven客户端,客户端默认从中央仓库( http://www.mvnrepository.com/ )下载jar包。

maven安装目录
  |--bin   Maven的可执行命令文件夹
  |--boot  Maven的引导程序(类加载器)
  |--conf  配置文件夹
  |--lib   Maven的核心程序代码

Maven的仓库分类

  • 本地仓库:本地缓存jar包的文件夹,通常我们会修改本地仓库地址
  • 远程仓库:也叫私服。一些企业、组织、社区自己搭建的仓库服务
  • 中央仓库:Maven官方团队提供的仓库,里边有最全的jar包

常用的项目构建命令:

  • 清理:mvn clean,清理target目录
  • 编译:mvn compile,编译主体程序代码,结果放在target目录里
  • 测试:mvn test,运行单元测试代码。要求:单元测试类放在src\test\java里,并且类名以Test结尾
  • 打包:mvn package,把主体程序代码打包。Java项目打包成jar包,web项目打包成war包
  • 安装:mvn install,把程序包安装到本地仓库。

依赖范围:在打包时需要设定scope作用域

idea如何使用maven打包war_idea如何使用maven打包war

(一)windows安装

用于项目开发

1.下载maven安装包

http://maven.apache.org/download.cgi

2.压缩包解压

3.配置环境变量

  • 增加MAVEN_HOME=Maven的解压目录
  • 修改Path中添加 %MAVEN_HOME%\bin

4.配置conf/setting.xml目录

指定jdk版本

<profile>    
     <id>jdk-1.8</id>    
     <activation>    
         <activeByDefault>true</activeByDefault>    
         <jdk>1.8</jdk>    
     </activation>    
     <properties>    
         <maven.compiler.source>1.8</maven.compiler.source>    
         <maven.compiler.target>1.8</maven.compiler.target>    
         <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>    
     </properties>    
 </profile>

改变仓库位置

默认在用户目录下,这样会占用C盘的空间: <localRepository>D:\server\maven</localRepository>

5.验证Maven配置

cmd命令:mvn -version

(二)linux安装

用于项目部署,当然你也可以选择不安装,在本地直接把依赖都打包到项目工程里面。

其他步骤均和windows一样,只有设置环境变量不一样

linux设置环境变量

设置环境变量 :

vim /etc/profile

在/etc/profile中添加以下几行

MAVEN_HOME=/usr/local/maven3
export MAVEN_HOME
export PATH=${PATH}:${MAVEN_HOME}/bin

执行source /etc/profile使环境变量生效

source /etc/profile

最后运行mvn -v验证maven是否安装成功,如果安装成功会打印如下内容

mvn -v

(三)maven聚合工程的创建

搭建maven聚合工程,可以把子模块建在父工程里面,也可以创建一个空项目把父工程和子工程做成同级目录后在pom添加依赖,需要注意的是父工程是做版本控制的,同时父工程里面有的包子工程都会自动继承。比如mybatis的依赖只有dao层使用,就不要添加到父工程中。

构建普通maven聚合工程详细步骤参考:

创建spring boot的maven聚合工程

你可以先创建普通maven聚合工程之后添加spring boot的起步依赖,也可以使用idea的spring initalizr创建工程后再设定聚合工程的父子关系(演示)。

(1)创建空项目用来放置项目

idea如何使用maven打包war_jar包_02

idea如何使用maven打包war_jar_03

(2)设置maven环境

idea如何使用maven打包war_jar包_04

(3)创建父工程模块

idea如何使用maven打包war_jar_05

idea如何使用maven打包war_maven_06

添加起步依赖:注意有版本区别,后面的步骤确定即可

idea如何使用maven打包war_idea如何使用maven打包war_07

(4)创建子工程

idea如何使用maven打包war_jar包_08

idea如何使用maven打包war_jar包_09

后面一直确定即可

(5)建立父子依赖

父模块pom

idea如何使用maven打包war_maven_10

子模块pom

idea如何使用maven打包war_maven_11

(6)其他步骤

删除无用的文件

idea如何使用maven打包war_idea如何使用maven打包war_12

web目录没有webapps目录(参考):

补充pom文件

       比如你需要打包到私服就需要添加配置,内容参考文章后面的部分

(6)运行

这种方式创建的项目会自动创建程序入口,使用程序入口启动项目即可

idea项目打包

spring boot打包工具默认把运行文件打包到各模块的target目录下,生成的jar也在该目录下

idea如何使用maven打包war_idea如何使用maven打包war_13

直接丢上去运行可能会找不到类,这时我们可以充分的利用idea提供给我的打包设置。

war包

先设置编译输出实体,把编译后生成的文件按照web工程的方式设置,创建后默认的就可以

idea如何使用maven打包war_idea如何使用maven打包war_14

再设置输出war包实体

idea如何使用maven打包war_jar包_15

idea如何使用maven打包war_jar包_16

jar包

idea如何使用maven打包war_jar_17

idea如何使用maven打包war_maven_18

创建后再项目目录下会新增一个文件

idea如何使用maven打包war_maven_19

结果验证

idea如何使用maven打包war_idea如何使用maven打包war_20

idea如何使用maven打包war_maven_21

idea如何使用maven打包war_jar_22

注意:这个操作一定要再添加依赖之后,如果新增依赖,需要重新设置实体。

这样打包所有的依赖都解压成class文件,如果你想打成jar的形式

idea如何使用maven打包war_jar包_23

你也可以把lib单独做一个文件夹打到一起(参考):

总之打包你想怎么打就怎么打,想把依赖放哪就放哪,不过单独依赖单独打包就注意项目启动要设置classpath加载路径,否则会出现找不到依赖包的错误。

(四)搭建maven私服

私服服务器即是公司内部的 maven 远程仓库, 每个员工的电脑上安装 maven 软件并且连接私服服务器,员工将自己开发的项目打成 jar 并发布到私服服务器,其它项目组从私服服务器下载所依赖的构件(jar)。私服还充当一个代理服务器,当私服上没有 jar 包会从互联网中央仓库自动下载 ,个人开发是否安装私服根据实际需求,可以将本地依赖包上传到maven本地或者直接按照普通工程方式导入项目,这样就不需要安装私服。

idea如何使用maven打包war_jar包_24

特点

1.便于公司内部jar包调用

2.提高jar包下载速度

安装步骤

参考链接:

1.下载私服nexus安装包

https://www.sonatype.com/download-oss-sonatype>

idea如何使用maven打包war_jar包_25

2.解压安装包

idea如何使用maven打包war_jar_26

   查看nexus的配置文件conf/nexus.properties

  

idea如何使用maven打包war_idea如何使用maven打包war_27

3.安装服务

使用管理员方式运行dos,切换到安装目录D:\server\nexus\nexus-3.20.1-01\bin,执行nexus.bat install

4.启动服务

idea如何使用maven打包war_idea如何使用maven打包war_28

或者使用nexus.bat start

启动成功

idea如何使用maven打包war_maven_29

5.验证

管理界面http://localhost:8081/nexus

登入账号admin 新版本的密码不再是admin123

/sonatype/sonatype-work/nexus3/ 复制 admin.password 里 的密码登录即可,登录后,会提示要修改密码,修改密码后,会发现/nexus-data/admin.password 已经不在

6.卸载nexus

cmd进入nexus的bin目录,

停止服务

执行:nexus.bat stop

执行:nexus.bat uninstall

nexus仓库

1.仓库

仓库类型

hosted(宿主) :私服

    maven-releases : 指公司内部已经发布正式版本的项目 (自己开发)

    maven-snapshorts : 指公司内部项目还处于测试版本的项目 (自己开发)

    maven-3rd party : 私服配置指向第三方仓库 (其它公司开发 )

proxy(代理) :私服

   maven-central:代理仓库,代理中央仓库

   自己新增阿里云的仓库,提高下载速度,阿里云的maven仓库url为http://maven.aliyun.com/nexus/content/groups/public

    然后再public组里面讲这个aliyun-proxy仓库加入,排在maven-central之前即可。

group:仓库组

   maven-public:仓库分组,把上面三个仓库组合在一起对外提供服务,在本地maven基础配置settings.xml中使用

Nexus的调度任务

默认安装好之后是没有索引和jar文件的,因为你要自己定义任务去执行。

Nexus提供了一系列可配置的调度任务来方便用户管理系统。用户可以设定这些任务运行的方式,例如每天、每周等。调度任务会在适当的时候在后台运行。

要建立一个调度任务,单击左边导航菜单中的Tasks,点击Create Task,然后选择一个任务类型。

idea如何使用maven打包war_maven_30

下几种常用类型的调度任务:

  • Execute script:执行自定义脚本
  • Purge开头:清理一些不使用的资源。
  • Rebuild repository index:为仓库重新编纂索引,从远仓库下载最新的索引。
  • Rebuild Maven repository metadata:基于仓库内容重新创建仓库元数据文件,同时重新创建每个文件的校验和md5与sha1。
  • Remove snapshots from Maven repository:把快照删了,这个是在稳定版发布后清除

Nexus搜索页

这个不需要登录就可以访问,用来查询jar包。支持模糊查询

idea如何使用maven打包war_jar_31

Blob Stores

文件存储的地方,创建一个目录的话,对应文件系统的一个目录,可供仓库上传文件使用,如图所示:

idea如何使用maven打包war_maven_32

 

本地Maven使用私服

安装和配置好之后,在开发中如何使用呢。可在maven的默认配置settings.xml中修改如下:

<servers>
    <server>
        <id>releases</id>
        <username>admin</username>
        <password>admin123</password>
    </server>
    <server>
        <id>snapshots</id>
        <username>admin</username>
        <password>admin123</password>
    </server>
</servers>

<mirrors>
    <mirror>
        <id>nexus</id>
        <mirrorOf>*</mirrorOf>
        <url>http://localhost:8081/repository/maven-public/</url>
    </mirror>
</mirrors>

<profiles>
    <profile>  
      <id>dev</id>
      <repositories>
        <repository>
          <id>Nexus</id>
          <url>http://localhost:8081/repository/maven-public/</url>
          <releases>
            <enabled>true</enabled>
          </releases>
          <snapshots>
            <enabled>true</enabled>
            <updatePolicy>always</updatePolicy>
          </snapshots>
        </repository>
      </repositories>
      <activation>
        <activeByDefault>true</activeByDefault>      
        <jdk>1.8</jdk>
      </activation>
      <properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
      </properties>
    </profile>
</profiles>
<activeProfiles>
    <activeProfile>dev</activeProfile>
</activeProfiles>

如果要发布自己的jar到私服,就需要修改工程的pom.xml,添加如下内容,否则什么都不用做:

<distributionManagement>
  <repository>
    <id>maven-releases</id><!-- 需要与私服releases中配置的id一致 -->
    <name>itcast-releases</name>
    <url>http://localhost:8081/repository/maven-releases/</url>
  </repository>
  <snapshotRepository>
    <id>maven-snapshots</id><!-- 需要与私服snapshots中配置的id一致 -->
    <name>itcast-snapshots</name>
    <url>http://localhost:8081/repository/maven-snapshots/</url>
  </snapshotRepository>
</distributionManagement>

注意上面的repository的id值一定要跟settings.xml文件中配置的server一致。

上传到Nexus上,使用 mvn deploy 即可,开发的时候请使用snapshot版本,也就是version的后缀必须是-SNAPSHOT

<groupId>com.enzhico</groupId>
<artifactId>micro-pay-sdk</artifactId>
<version>1.2-SNAPSHOT</version>
<packaging>jar</packaging>

快照版成功效果

idea如何使用maven打包war_idea如何使用maven打包war_33

第三方Jar上传到Nexus

mvn deploy:deploy-file \
    -DgroupId=<group-id> \
    -DartifactId=<artifact-id> \
    -Dversion=<version> \
    -Dpackaging=<type-of-packaging> \
    -Dfile=<path-to-file> \
    -DrepositoryId=<server-id-settings.xml> \
    -Durl=<url-of-the-repository-to-deploy>

-DrepositoryId的值即为在setttings.xml里面配置的server id。

打包或发布的时候如果想跳过测试,加一个参数:

mvn clean && mvn deploy -DskipTests=true