当前位置: 首页 > news >正文

Maven编译打包

Maven

文章目录

  • Maven
  • 依赖范围(scope)
  • plugin
    • 【编译Java源代码】配置
    • 【打包】配置
      • 打包成一个可执行的 JAR(maven-shade-plugin)
      • 将项目输出合并到单个可分发的包中(maven-assembly-plugin)

依赖范围(scope)

  • 依赖范围:scope

    <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.4</version><!-- 依赖范围 --><scope>compile</scope>
    </dependency>
    
  • 可选值:compile/test/provided/system/runtime/import

    main目录test目录开发运行打包运行
    compile有效有效有效有效
    test无效有效有效无效
    provided有效有效有效无效
    system
    runtime
    import

plugin

【编译Java源代码】配置

<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><!-- 指定插件的版本 --><version>3.3</version><configuration><!-- 指定源代码的版本 --><source>1.8</source><!-- 指定生成的字节码版本 --><target>1.8</target><!-- 指定源文件的编码 --><encoding>UTF-8</encoding></configuration>
</plugin>

【打包】配置

打包成一个可执行的 JAR(maven-shade-plugin)

maven-shade-plugin 官网链接

将 Java 应用程序及其所有依赖项打包成一个可执行的 JAR 文件

<plugin><groupId>org.apache.maven.plugins</groupId><!-- 将 Java 应用程序及其所有依赖项打包成一个可执行的 JAR 文件 --><artifactId>maven-shade-plugin</artifactId><version>3.2.4</version><configuration><!-- 不创建依赖减少的 POM 文件 --><createDependencyReducedPom>false</createDependencyReducedPom><artifactSet><excludes><!-- 排除所有 org.apache.hadoop 的依赖 --><exclude>org.apache.hadoop:*</exclude></excludes></artifactSet></configuration><executions><execution><!-- 在打包阶段执行 --><phase>package</phase><goals><!-- 执行 shade 目标 --><goal>shade</goal></goals><configuration><transformers><transformerimplementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"><!--如果要打包的话,这里要换成对应的 main class--><mainClass>com.sensorsdata.analytics.DataPreProcess</mainClass></transformer></transformers><filters><filter><!-- 适用于所有工件的过滤器 --><artifact>*:*:*:*</artifact><!-- 排除所有 .SF .DSA .RSA 文件 --><excludes><exclude>META-INF/*.SF</exclude><exclude>META-INF/*.DSA</exclude><exclude>META-INF/*.RSA</exclude></excludes></filter></filters></configuration></execution></executions>
</plugin>

将项目输出合并到单个可分发的包中(maven-assembly-plugin)

maven-assembly-plugin 官网链接

将所有文件打包成一个单独的分发包

两个步骤

  1. 编写 assembly.xml 配置文件(将项目的工件与生成的文档一起打包到压缩包中)
  2. 使用 maven-assembly-plugin 打包插件并引用 assembly.xml 配置文件

pom.xml

<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-assembly-plugin</artifactId><version>3.3.0</version><executions><execution><id>bin</id><phase>package</phase><goals><goal>single</goal></goals><configuration><!-- 引用 assembly.xml 配置文件 --><descriptors><descriptor>src/main/assembly/assembly.xml</descriptor></descriptors></configuration></execution></executions>
</plugin>

assembly.xml

<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.0.0 http://maven.apache.org/xsd/assembly-2.0.0.xsd"><id>bin</id><!-- 压缩格式 --><formats><format>tar.gz</format></formats><includeBaseDirectory>true</includeBaseDirectory><fileSets><!-- 将 ${project.parent.basedir}/data_export_engine-dist/src/main/bin 目录中的所有文件放到 bin 目录 --><fileSet><!-- 模块目录的绝对或相对位置 --><!-- ${project.parent.basedir} : 当前项目的父项目的基础目录 --><!-- ${project.basedir} : 当前项目的基础目录 --><directory>${project.parent.basedir}/data_export_engine-dist/src/main/bin</directory><!-- 在directory目录中选择需要打包的文件 --><includes><include>**</include></includes><!-- 相对于程序级根目录的输出目录 --><outputDirectory>bin</outputDirectory><fileMode>0755</fileMode></fileSet><!-- 将 ${project.parent.basedir}/data_export_engine-common/target 目录中的所有 jar包 放到 lib 目录 --><fileSet><directory>${project.parent.basedir}/data_export_engine-common/target</directory><includes><include>*.jar</include></includes><outputDirectory>lib</outputDirectory></fileSet></fileSets><!-- 将所有的依赖jar包放到 lib 目录(依赖范围:runtime) --><dependencySets><dependencySet><outputDirectory>lib</outputDirectory></dependencySet></dependencySets>
</assembly>
http://www.xdnf.cn/news/69535.html

相关文章:

  • MySQL的ACID特性
  • 抽象类的特点
  • 面经-浏览器/网络/HTML/CSS
  • 单页面应用的特点,什么是路由,VueRouter的下载,安装和使用,路由的封装抽离,声明式导航的介绍和使用
  • 数据结构之二叉树
  • 线性回归之多项式升维
  • TDengine 存储引擎设计
  • map和set的使用
  • PHP日志会对服务器产生哪些影响?
  • 安恒安全渗透面试题
  • [PTA]2025 CCCC-GPLT天梯赛-这不是字符串题
  • 29-JavaScript基础语法(函数)
  • JavaScript 中的单例模式
  • AI Agent开发第34课-用最先进的图片向量BGE-VL实现“图搜图”-下
  • C# 的 字符串插值($) 和 逐字字符串(@) 功能
  • 高效Java面试题(附答案)
  • 鸿蒙系统的 “成长烦恼“:生态突围与技术迭代的双重挑战
  • KRaft面试思路引导
  • Linux环境准备(安装VirtualBox和Ubuntu,安装MySQL,MySQL启动、重启和停止)
  • promise.resolve,promise.reject,promise.all的理解和运用
  • Java 性能优化:从硬件到软件的全方位思考
  • 深入解析 Python 函数:从基础到进阶
  • Python利用shp文件裁剪netcdf文件
  • Linux-scp命令
  • 高尔夫球规则及打法·棒球1号位
  • 软件模块设计质量之内聚
  • 大模型AI的运行逻辑与准确性保障机制——以DeepSeek与豆包为例
  • 当socket的状态为SOCK_SYNSENT时,不可能同时存在Sn_IR_TIMEOUT中断标志被置位的情况
  • 基于SpringBoot的高校体育馆场地预约管理系统-项目分享
  • jinjia2将后端传至前端的字典变量转换为JS变量