详解用maven将dubbo工程打成jar包运行
作者:sf4y 发布时间:2023-10-20 04:34:42
标签:maven,dubbo,jar包
maven打包方式
使用maven打包插件maven-jar-plugin
在pom.xml
文件最后新增以下代码。
maven-dependency-plugin
是指将依赖的jar包复制到指定目录
maven-resources-plugin
将依赖的resources复制到指定目录
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.6</version>
<configuration>
<archive>
<manifest>
<!-- 是否依赖外部jar包 -->
<addClasspath>true</addClasspath>
<!-- 依赖外部jar包路径 -->
<classpathPrefix>lib/</classpathPrefix>
<!-- 启动函数 --> <mainClass>com.alibaba.dubbo.container.Main</mainClass>
</manifest>
</archive>
<!-- 打包之后输出目录 -->
<outputDirectory>${project.build.directory}/maven-archiver</outputDirectory>
<!-- 剔除已打包的配置文件 -->
<excludes>
<exclude>*.*</exclude>
<exclude>config/*</exclude>
<exclude>config/tencent/*</exclude>
<exclude>META-INF/spring/*</exclude>
</excludes>
</configuration>
</plugin>
<!-- 拷贝依赖的jar包到lib目录 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.8</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>
${project.build.directory}/maven-archiver/lib
</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<!-- 拷贝依赖的资源文件包到resources目录 -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<executions>
<execution>
<id>copy-resources</id>
<phase>package</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/maven-archiver/resources</outputDirectory>
<resources>
<resource>
<directory>${basedir}/src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
运行jar包方式
打包之后的目录结构
包含了class文件,以及需要的配置文件信息(不包含excludes的配置文件)
在MANIFEST.MF
中包含了运行需要的信息
Class-Path: lib/commons-beanutils-1.8.3.jar lib/commons-betwixt-0.8.jar
...
Main-Class: com.alibaba.dubbo.container.Main
java -jar
启动命令
java -jar 执行命令时,会用到目录META-INFMANIFEST.MF中Main-Class的参数,这个是在打包的时候指定函数的入口。
java -jar x-0.0.1-SNAPSHOT.jar
java -cp
启动命令
java -cp .:x-0.0.1-SNAPSHOT.jar packname.mainclassname
因为我工程中需要引用外部的resources文件所以我通常用这种方式启动
配置文件地址是绝对路径
java -cp /Users/username/resources:dubbo-service-1.0.jar com.alibaba.dubbo.container.Main
-cp
和-classpath
是相同的效果
java -cp 是指定运行所依赖其他类的路径,通常是类库、jar 包之类,多个依赖在Window
上用分号";"隔开,linux
上用":"隔开。
表达式支持通配符
java -cp .:/Users/username/*.jar packname.mainclassname
打成一个jar包
如果需要将依赖的jar包都达到一个jar包中运行,可以使用maven-shade-plugin
这个插件。
这个插件的功能主要是:将依赖的jar包打包到当前jar包,并且在打包的时候把类重命名,可以解决jar包的多版本冲突,具体可以查询官方插件文档。
参考文档
maven官方插件文档
来源:https://segmentfault.com/a/1190000019025385


猜你喜欢
- Java中对象的创建clone顾名思义就是复制, 在Java语言中, clone方法被对象调用,所以会复制对象。所谓的复制对象,首先要分配一
- 上篇文章我们已经可以在 Grafana 上看到对应的 SpringBoot 应用信息了,通过这些信息我们可以对 SpringBoot 应用有
- 时间轴,顾名思义就是将发生的事件按照时间顺序罗列起来,给用户带来一种更加直观的体验。京东和淘宝的物流顺序就是一个时间轴,想必大家都不陌生,如
- 第1部分 TreeSet介绍TreeSet简介TreeSet 是一个有序的集合,它的作用是提供有序的Set集合。它继承于AbstractSe
- 介绍技术之前有用eureka 现在用nacos工作流和gateway接口数据流向数据表新建项目新建cloud-删除src-新建modleEu
- 一、先看结果1.1创造营2020撑腰榜前三甲创造营2020撑腰榜前三名分别是 希林娜依·高、陈卓璇 、郑乃馨>>>df1[
- Application对象Application对象生存期和Web应用程序生存期一样长,生存期从Web应用程序网页被访问开始,HttpApp
- 场景点击第一个Activity中的按钮,启动第二个Activity,关闭第二个Activity,返回到第一个Activity。在第一个Act
- 本文实例为大家分享了C#实现窗体抖动的具体代码,供大家参考,具体内容如下原理:围绕中心点运动一圈方法一:通过线程实现需求:需要using S
- Mybatis动态排序 #{} ${}问题在写Mybatis动态排序是遇到一个问题,开始,我是这样写的<if test="o
- jstat命令简介jstat(Java Virtual Machine Statistics Monitoring Tool)是JDK提供的
- 本文实例讲述了Java笛卡尔积算法原理与实现方法。分享给大家供大家参考,具体如下:笛卡尔积算法的Java实现:(1)循环内,每次只有一列向下
- 示例代码:class BoxIntInteger {public static void main(String[] args) {Inte
- 一、线程间等待与唤醒机制wait()和notify()是Object类的方法,用于线程的等待与唤醒,必须搭配synchronized 锁来使
- 本文实例讲述了dotNet中的反射用法。分享给大家供大家参考,具体如下:参考MSDN:ms-help://MS.VSCC.2003/MS.M
- 1.后台参数校验Spring Validation验证框架对参数的验证机制提供了@Validated(Spring JSR-303规范,是标
- 目录Directory:创建文件夹删除文件夹获取文件夹下的子文件夹获取同类型的文件判断文件夹是否存在移动文件夹总结之前发过File对文件的操
- 本文实例讲述了Android编程中File文件常见存储与读取操作。分享给大家供大家参考,具体如下:MainActivity文件代码如下:pa
- 1.性能考虑,优先选择数组数组在项目开发当中使用的频率是越来越少,特别是在业务为主的开发当中,首先数组没有List,Set等集合提供的诸多方
- 一、java多线程基本入门java多线程编程还是比较重要的,在实际业务开发中经常要遇到这个问题。 java多线程,传统创建线程的方式有两种。