一、Maven安装
官网:https://maven.apache.org/download.cgi
环境变量:MAVEN_HOME
值:解压出来的安装目录
Path中新建:%MAVEN_HOME%\bin
settings.xml 镜像:
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
idea配置:
二、Maven打包
1、maven-jar-plugin、maven-dependency-plugin
不含依赖
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<!--配置JAR文件的清单-->
<manifest>
<!--是否将类路径添加到清单中,设置为true表示要添加类路径-->
<addClasspath>true</addClasspath>
<!--指定了类路径的前缀,设置为lib/表示类路径中的依赖JAR文件会放在lib/目录下-->
<classpathPrefix>lib/</classpathPrefix>
<!-- 指定了主类,即程序的入口点,它是在生成的JAR文件的清单中设置的-->
<mainClass>com.sgg.Main</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
含依赖
<build>
<plugins>
<!-- 使用 maven-jar-plugin 创建 JAR 文件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.2.2</version> <!-- 版本号可以根据需要进行调整 -->
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath> <!-- 将类路径添加到 MANIFEST.MF -->
<mainClass>com.example.Main</mainClass> <!-- 指定启动类 -->
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>jar</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- 使用 maven-dependency-plugin 复制依赖 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.2.0</version> <!-- 版本号可以根据需要进行调整 -->
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase> <!-- 在打包阶段执行 -->
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory> <!-- 指定复制依赖的目录 -->
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
2、spring-boot-maven-plugin
不含依赖
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.6.3</version> <!-- 版本号可以根据需要进行调整 -->
<configuration>
<executable>true</executable> <!-- 将 JAR 文件设置为可执行文件 -->
</configuration>
</plugin>
</plugins>
</build>
含依赖
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.6.3</version> <!-- 版本号可以根据需要进行调整 -->
<configuration>
<!-- 可选配置 -->
<mainClass>com.example.MyApplication</mainClass> <!-- 指定启动类 -->
<executable>true</executable> <!-- 将 JAR 文件设置为可执行文件 -->
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal> <!-- 将依赖打包到可执行 JAR 文件中 -->
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
3、maven-shade-plugin
执行clean、package之后生成三个jar
含依赖:
Main20240103-1.0-SNAPSHOT.jar
Main20240103-1.0-SNAPSHOT-shaded.jar
不含依赖:
original-Main20240103-1.0-SNAPSHOT.jar
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.4.1</version>
<configuration>
<transformers>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<!--设置主函数-->
<mainClass>com.sgg.Main</mainClass>
</transformer>
</transformers>
</configuration>
<executions>
<execution>
<!--指定了插件执行的阶段,这里是在package阶段执行-->
<phase>package</phase>
<!--指定了插件执行的目标,这里是执行shade目标,即创建 JAR-->
<goals>
<goal>shade</goal>
</goals>
<configuration>
<!--标签用于配置过滤器,用于排除特定的资源文件-->
<filters>
<filter>
<!-- 指定了要过滤的依赖坐标,这里是通配符*:*,表示所有的依赖-->
<artifact>*:*</artifact>
<!--指定要排除的资源文件,这里排除了META-INF/*.SF,即所有JAR文件中的META-INF目录下的.SF文件-->
<excludes>
<exclude>META-INF/*.SF</exclude>
</excludes>
</filter>
</filters>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
4、maven-assembly-plugin
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.3.0</version>
<configuration>
<descriptorRefs>
<!--包含所有依赖的 JAR-->
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<!--入口-->
<mainClass>com.sgg.Main</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<!--Maven 的构建生命周期的 package 阶段执行该插件-->
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<!--表示只执行一次-->
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
三、Maven命令
mvn compile:编译主目录中的Java源代码,并将编译后的.class文件输出到target目录中。
mvn clean:清理项目生成的临时文件,通常是删除target目录。
mvn test:编译测试目录下的Java源代码,并将编译后的.class文件输出到target/test-classes目录中。同时运行测试用例。
mvn package:将主目录的Java文件打包成JAR或WAR文件,并生成相应的包。
mvn install:将打包后的包安装到本地仓库中,供其他项目使用。
mvn deploy:发布打包后的文件到远程仓库,供其他人员下载依赖。
mvn site:生成项目文档和报告,并输出到target/site目录中。
mvn versions:set:用于设置或更改项目的版本号。
mvn dependency:tree:显示项目的依赖树,用于查看项目的依赖关系。
mvn archetype:generate:通过Maven Archetype插件生成一个新的Maven项目结构。
mvn exec:java:直接运行一个可执行的Java类。
mvn exec:java -Dexec.mainClass=com.example.Main:通过指定mainClass参数来运行指定的Java类。
mvn dependency:resolve:解析项目的依赖关系,并显示依赖的坐标信息。
mvn dependency:analyze:分析项目的依赖关系,并显示潜在的依赖冲突和未使用的依赖。
mvn validate:验证POM文件的配置是否正确。
mvn help:describe -Dplugin=help:获取指定插件的描述信息。