maven 打包

在 pom.xml 文件内配置入口类:

  1. <plugin>
  2. <groupId>org.apache.maven.plugins</groupId>
  3. <artifactId>maven-jar-plugin</artifactId>
  4. <version>3.2.0</version>
  5. <configuration>
  6. <archive>
  7. <manifest>
  8. <!-- 入口类 -->
  9. <mainClass>org.example.Demo</mainClass>
  10. </manifest>
  11. </archive>
  12. </configuration>
  13. </plugin>

maven 约定

maven 约定:

  • src/main/java:存放项目的 .java 文件
  • src/main/resources:存放项目资源文件
  • src/main/webapp:存放web项目的文件
  • src/test/java:存放全部测试的 .java 文件
  • src/test/resources:存放测试的资源文件

maven 生命周期

maven 的构建生命周期,只是一个抽象的规范流程

  • 周期内的每个阶段的具体执行,是在插件里面来实现的
  • 运行任何一个阶段,都会从其所在的生命周期的第一个阶段开始,如 mvn package,会从 default 的 process-resources 阶段运行到 package 阶段

未命名文件.jpg

各个生命周期预设的定义如下:

阶段 处理 描述
验证 validate 验证项目 验证项目是否正确且所有必须信息是可用的
编译 compile 执行编译 源代码编译在此阶段完成
测试 Test 测试 使用适当的单元测试框架,如Junit运行测试
包装 package 打包 创建 jar/war 包
检查 verify 检查 对继承测试的结果进行检查
安装 install 安装 安装打包的项目到本地仓库,供其他项目使用
部署 deploy 部署 拷贝最终的工程包到远程仓库

maven 插件:插件 plugin 绑定到生命周期,是承担实际功能的组件,mvn 运行时,会自动关联来运行
default 生命周期与插件:

生命周期 插件 作用
process-resources maven-resources-plugin:resources 复制主资源文件至主输出目录
compile maven-compiler-plugin:compile 编译主代码至输出目录
process-test-resources maven-reources-plugin:testResources 复制测试资源文件至测试输出目录
test maven-compiler-plugin:testCompile 编译测试代码至测试输出目录
package maven-jar-plugin:jar 创建项目jar包
install maven-install-plugin:install 将项目输出构建安装到本地仓库
deploy maven-deploy-plugin:deploy 将项目输出构建部署到远程仓库

常用的maven命令:

  • mvn clean:清理
  • mvn compile:编译主程序
  • mvn package:打包
  • mvn install:安装 jar 到本地库

使用maven命令生成项目:mvn archetype:generate -DgroupId=com.example -DartifactId=Demo -DarchetypeArtifactId=maven-archetype-quickstart -Dversion=1.0

  • -DgroupId:项目ID
  • -DartifactId:项目名
  • -DarchetypeArtifactId:创建项目的模板
  • -Dversion:项目版本

Maven 坐标与依赖

1、标识
在 Maven 中,坐标是 jar 包的唯一标识,坐标元素包括如下参数:

  • groupId:定义当前模块隶属的实际Maven项目,一般是公司域名倒置
  • artifactId:定义实际项目中的一个Maven模块,模块的唯一标识
  • version:项目版本
    • SNAPSHOT:不稳定快照版
    • LATEST:最新版,可能是发布版,可能是稳定版
    • RELEASE:最后一个发布版
  • packaging:项目的打包方式
    • jar:默认
    • war
    • pom
    • maven-plugin
  • dassifier:附属构建,如javadoc等,需要有附加插件的帮助

2、依赖管理:在 java 中,依赖的表现形式为,当项目启动时,其依赖的 jar 包必须放入其 classpath 路径内

3、依赖传递:maven 默认的依赖传递取舍规则

  • 路径最短原则,即项目根目录中的依赖优先级最高,往下优先级递减
  • 同路径长度下,谁先声明谁优先,即当需要覆盖某个依赖时,可以将最新的依赖写在前面

4、解决依赖冲突:

  • 使用 exclusions 标签将相关依赖排除
  • mvn dependency:tree 用来查看决策出来的依赖树

5、依赖的生命周期:

  • compile:默认,用于编译,打包时会包含进去
  • provided:用于编译,但不会被打包
  • runtime:在运行时提供支持,依赖的 jar 打包时会包含进去
  • test:仅用于测试,依赖的 jar 在打包时不会包含
  • system:需要外在提供相应的元素,根据 systemPath 来取得,一般禁止使用

Maven 插件开发

可以自定义插件,来扩展 maven 的功能:
1、引入 maven api 依赖:

  1. <packaging>maven-plugin</packaging>
  2. <dependencies>
  3. <dependency>
  4. <groupId>org.apache.maven</groupId>
  5. <artifactId>maven-plugin-api</artifactId>
  6. <version>3.6.3</version>
  7. </dependency>
  8. <dependency>
  9. <groupId>org.apache.maven.plugin-tools</groupId>
  10. <artifactId>maven-plugin-annotations</artifactId>
  11. <version>3.5.2</version>
  12. <scope>provided</scope>
  13. </dependency>
  14. </dependencies>

2、编写简单 Mojo 类:继承 AbstractMojo 类

  1. // 指定目标方法
  2. @Mojo(name = "log")
  3. public class MyPlugin extends AbstractMojo {
  4. @Parameter(property = "log.name",defaultValue = "Demo")
  5. private Object name;
  6. @Override
  7. public void execute() throws MojoExecutionException, MojoFailureException {
  8. getLog().info("Hello");
  9. }
  10. }