maven使用

简介: maven使用

一.常用命令

#将以前编译得到的旧的 class 字节码文件删除

mvnclean

 

#编译,将 Java 源程序编译成 class 字节码文件

mvncompile

 

#测试,并生成测试报告

mvntest

 

#打包,动态 web工程打 war包,Java工程打 jar 包

mvnpakage

 

#将项目生成 jar 包放在仓库中,以便别的模块调用

mvninstall

 

#打成jar包,并且抛弃测试用例打包

mvncleaninstall-Dmaven.test.skip=true

 

#动态 web工程打 war包,Java工程打 jar 包 ,并且抛弃测试用例打包

mvncleanpakage-Dmaven.test.skip=true

## 二.下载地址

1.依赖包

http://www.mvnrepository.com/

 

http://mvnrepository.com/

 

http://findjar.com

 

http://sourceforge.net/

2.jar 下载

2.1.方式一

2.2.方式二

https://repo1.maven.org/maven2/

3.配置

三.依赖说明

1.dependencyManagement

  • 在该元素下声明的依赖不会实际引入到模块中,只有在 dependencies 元素下同样声明了该依赖,才会引入到模块中。该元素能够约束 dependencies 下依赖的使用
  • 即 dependencies 声明的依赖若未指定版本,则使用 dependencyManagement 中指定的版本,否则将覆盖 dependencyManager 中的版本
  • dependencyManager 可以传递给子模块,所以在子模块中可以引用父模块 dependencyManagement 定义好的依赖

<!--在dependencyManagement 声明的依赖不会实际引入到模块中 -->

<dependencyManagement>

   <dependencies>

       <dependency>

           <groupId>org.springframework.boot</groupId>

           <artifactId>spring-boot-starter-web</artifactId>

           <version>2.7.5</version>

       </dependency>

   </dependencies>

</dependencyManagement>

如果需要使用该依赖,则应该在 dependencies 中重新声明该依赖

<!--如果需要使用,在dependencies中声明该依赖,无须指定版本-->

<dependencies>

   <dependency>

       <groupId>org.springframework.boot</groupId>

       <artifactId>spring-boot-starter-web</artifactId>

   </dependency>

</dependencies>

如果是在子类中,需要先引入父模块,再引用依赖

<!--引入父模块, parent标签可以理解为java中的继承关系-->

<parent>

   <groupId>父类 groupId</groupId>

   <artifactId>父类 artifactId</artifactId>

   <version>父类 version</version>

</parent>


<!--如果需要使用,在dependencies中声明该依赖,无须指定版本-->

<dependencies>

   <dependency>

       <!--如果指定了版本号,则会覆盖父模块 dependencyManagement 定义的版本(不建议这

           做,dependencyManagement的作用本来就是用来统一版本,防止依赖冲突)-->

       <groupId>org.springframework.boot</groupId>

       <artifactId>spring-boot-starter-web</artifactId>

   </dependency>

</dependencies>

使用 dependencyManagement 可以统一声明依赖版本,进行集中管理,避免依赖冲突

2.distributionManagement

distributionManagement 的作用是"分发构件至远程仓库":

mvn install 会将项目生成的构件安装到本地 Maven 仓库,mvn deploy 用来将项目生成的构件分发到远程 Maven 仓库。本地 Maven 仓库的构件只能供当前用户使用,在分发到远程 Maven 仓库之后,所有能访问该仓库的用户都能使用你的构件。

我们需要配置 POM 的 distributionManagement 来指定 Maven 分发构件的位置。给出 Maven 部署当前项目的构件到远程库时,关于远程库的配置。

<distributionManagement>

   <repository>

       <id>随便起</id>

       <url>你自己maven环境下setting文件里面的私有库</url>

   </repository>

   <snapshotRepository>

       <id>随便起t</id>

       <url>你自己maven环境下setting文件里面的快照库</url>

   </snapshotRepository>

</distributionManagement>

3.使用总结

  • modules 中的 module 标签顺序,随意放置就好,不用按照子模块依赖顺序来设置,maven 会自动按照依赖顺序为你打包
  • modules 中的 module 标签作用:modules 只能在模块的打包方式是 pom 的时候才能使用,比如 packaging 设置为 pom,modeule 标签中的名称是其他模块 artifactId 名称,无论该模块是否打包方式为 pom 模块的子模块,都是可以的;在对父模块进行 mvn clean install 的时候,所有在 module 标签中的模块都会自动按照模块之间的依赖顺序进行 mvn clean install
  • 当我们从 maven 私服中下载子模块 jar 包的时候,该子模块 jar 包会去寻找用到的父模块 jar 包,主要目的是确定用到依赖的版本,所以我们把子模块 jar 包发布到 maven 仓库的时候,也一定要同步把父模块 jar 包发布到 maven 仓库,这样在下载子模块的时候才不会报错
  • 发布打包方式为 pom 的父模块到 maven 仓库的时候,我们可以删除父模块的 module 标签吗,我认为是可以的,因为 module 标签的作用在上面 2 中已经说明了,所以它只和打包方式为 pom 的模块进行 mvn clean install 的时候有关,也就是说只和开发的时候 mvn clean install 有关,和其他的地方没啥关系

四.常见问题

1.maven 打包异常

1.1.问题描述

No compiler is provided in this environment. Perhaps you are running on a JRE。

1.2.添加配置

添加配置指定 maven 打包的 java 环境,可以解决问题,但是因为开发人员每个人配的不一样,这样的配置不利于团队开发,也就是治标不治本,要找到问题的根本原因

<build>

       <plugins>

           <plugin>

               <!-- 指定maven编译的jdk版本 -->

               <groupId>org.apache.maven.plugins</groupId>

               <artifactId>maven-compiler-plugin</artifactId>

               <version>3.8.1</version>

               <configuration>

                   <verbose>true</verbose>

                   <fork>true</fork>

                   <!--你的jdk地址-->

                   <executable>/Library/Java/JavaVirtualMachines/jdk1.8.0_321.jdk/Contents/Home/bin/javac</executable>

               </configuration>

           </plugin>

       </plugins>

   </build>

1.3.检查配置

java --version #可以正常显示mvn --version #可以正常显示

使用 mvn -version runtime 检查 maven 的运行环境

mvn -version runtime

查看 java 的环境配置

vim ~/.bash_profile

source ~/.bash_profile

JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_321.jdk/Contents/Home

PATH=$JAVA_HOME/bin:$PATH:.

CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:.

export JAVA_HOME

export PATH

export CLASSPATH

1.4.java_home

执行下面的命令,如图,可以看到 2 个 home 目录,maven 使用的正是 JavaAppletPlugin.plugin 的 java_home,我们需要删除 JavaAppletPlugin.plugin 这个插件

/usr/libexec/java_home -V

1.5.删除插件

进入目录,需要使用 sudo 权限删除插件

cd /Library


cd Internet\ Plug-Ins


sudo rm -rf JavaAppletPlugin.plugin

检查 maven 的运行环境,和配置的 java 环境一致

mvn -version runtime

再次执行 maven 的打包命令,顺利打包.

2.jar 瘦身

<build>

   <plugins>

       <plugin>

           <groupId>org.apache.maven.plugins</groupId>

           <artifactId>maven-shade-plugin</artifactId>

           <version>3.2.4</version>

           <executions>

               <execution>

                   <phase>package</phase>

                   <goals>

                       <goal>shade</goal>

                   </goals>

                   <configuration>

                       <minimizeJar>true</minimizeJar>

                   </configuration>

               </execution>

           </executions>

       </plugin>

   </plugins>

</build>

3.环境配置

<profiles>

 <profile>

     <id>dev</id>

 

     <properties>

         <!--内部版本-->

         <tag.common.version>1.0.0-SNAPSHOT</tag.common.version>

         <tag.api.version>1.0.0-SNAPSHOT</tag.api.version>

         <tag.provider.version>1.0.0-SNAPSHOT</tag.provider.version>

     </properties>

 </profile>

 

 <profile>

     <id>test</id>

 

     <properties>

         <!--内部版本-->

         <tag.common.version>1.0.0-SNAPSHOT</tag.common.version>

         <tag.api.version>1.0.0-SNAPSHOT</tag.api.version>

         <tag.provider.version>1.0.0-SNAPSHOT</tag.provider.version>

     </properties>

 </profile>

 

 <profile>

     <id>uat</id>

 

     <properties>

         <!--内部版本-->

         <tag.common.version>1.0.0</tag.common.version>

         <tag.api.version>1.0.0</tag.api.version>

         <tag.provider.version>1.0.0</tag.provider.version>

     </properties>

 </profile>

 

 <profile>

     <id>prd</id>

 

     <properties>

         <!--内部版本-->

         <tag.common.version>1.0.0</tag.common.version>

         <tag.api.version>1.0.0</tag.api.version>

         <tag.provider.version>1.0.0</tag.provider.version>

     </properties>

 </profile>

</profiles>


相关文章
|
存储 Java Maven
|
数据安全/隐私保护
Maven-2
Maven-2
87 0
|
14小时前
|
Java 测试技术 项目管理
maven 用来做什么
Maven 是一款流行的 Java 项目管理工具,支持项目构建、依赖管理和信息管理。它通过自动化构建流程、中央与本地仓库的依赖管理、项目元数据维护、生成各类项目报告及协助项目部署,极大提升了开发效率和项目管理的便捷性。
15 5
|
2月前
|
Java API 项目管理
Maven的使用
Maven的使用
37 2
|
6月前
|
存储 IDE Java
Maven
Maven
49 0
|
7月前
|
存储 XML Java
maven
maven
346 0
|
Java 测试技术 Maven
maven总结
maven总结
45 0
|
存储 Java 程序员
Maven详解
Maven详解
332 0
|
Java 应用服务中间件 Maven
关于Maven,你真的了解它吗?(上)
关于Maven,你真的了解它吗?(上)