经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 软件/图像 » Maven » 查看文章
详解用maven将dubbo工程打成jar包运行
来源:jb51  时间:2019/4/30 8:30:38  对本文有异议

maven打包方式

使用maven打包插件maven-jar-plugin

pom.xml文件最后新增以下代码。

maven-dependency-plugin是指将依赖的jar包复制到指定目录

maven-resources-plugin将依赖的resources复制到指定目录

  1. <build>
  2. <plugins>
  3. <plugin>
  4. <groupId>org.apache.maven.plugins</groupId>
  5. <artifactId>maven-jar-plugin</artifactId>
  6. <version>2.6</version>
  7. <configuration>
  8. <archive>
  9. <manifest>
  10. <!-- 是否依赖外部jar包 -->
  11. <addClasspath>true</addClasspath>
  12. <!-- 依赖外部jar包路径 -->
  13. <classpathPrefix>lib/</classpathPrefix>
  14. <!-- 启动函数 --> <mainClass>com.alibaba.dubbo.container.Main</mainClass>
  15. </manifest>
  16. </archive>
  17. <!-- 打包之后输出目录 -->
  18. <outputDirectory>${project.build.directory}/maven-archiver</outputDirectory>
  19. <!-- 剔除已打包的配置文件 -->
  20. <excludes>
  21. <exclude>*.*</exclude>
  22. <exclude>config/*</exclude>
  23. <exclude>config/tencent/*</exclude>
  24. <exclude>META-INF/spring/*</exclude>
  25. </excludes>
  26. </configuration>
  27. </plugin>
  28.  
  29. <!-- 拷贝依赖的jar包到lib目录 -->
  30. <plugin>
  31. <groupId>org.apache.maven.plugins</groupId>
  32. <artifactId>maven-dependency-plugin</artifactId>
  33. <version>2.8</version>
  34. <executions>
  35. <execution>
  36. <id>copy-dependencies</id>
  37. <phase>package</phase>
  38. <goals>
  39. <goal>copy-dependencies</goal>
  40. </goals>
  41. <configuration>
  42. <outputDirectory>
  43. ${project.build.directory}/maven-archiver/lib
  44. </outputDirectory>
  45. </configuration>
  46. </execution>
  47. </executions>
  48. </plugin>
  49. <!-- 拷贝依赖的资源文件包到resources目录 -->
  50. <plugin>
  51. <artifactId>maven-resources-plugin</artifactId>
  52. <executions>
  53. <execution>
  54. <id>copy-resources</id>
  55. <phase>package</phase>
  56. <goals>
  57. <goal>copy-resources</goal>
  58. </goals>
  59. <configuration>
  60. <outputDirectory>${project.build.directory}/maven-archiver/resources</outputDirectory>
  61. <resources>
  62. <resource>
  63. <directory>${basedir}/src/main/resources</directory>
  64. <filtering>true</filtering>
  65.  
  66. </resource>
  67. </resources>
  68. </configuration>
  69. </execution>
  70. </executions>
  71. </plugin>
  72. </plugins>
  73. </build>

运行jar包方式

打包之后的目录结构

包含了class文件,以及需要的配置文件信息(不包含excludes的配置文件)


MANIFEST.MF中包含了运行需要的信息

  1. Class-Path: lib/commons-beanutils-1.8.3.jar lib/commons-betwixt-0.8.jar
  2. ...
  3. Main-Class: com.alibaba.dubbo.container.Main

java -jar

启动命令

java -jar 执行命令时,会用到目录META-INFMANIFEST.MF中Main-Class的参数,这个是在打包的时候指定函数的入口。

  1. java -jar x-0.0.1-SNAPSHOT.jar

java -cp

启动命令

  1. java -cp .:x-0.0.1-SNAPSHOT.jar packname.mainclassname

因为我工程中需要引用外部的resources文件所以我通常用这种方式启动

配置文件地址是绝对路径

  1. java -cp /Users/username/resources:dubbo-service-1.0.jar com.alibaba.dubbo.container.Main

-cp-classpath是相同的效果

java -cp 是指定运行所依赖其他类的路径,通常是类库、jar 包之类,多个依赖在Window 上用分号";"隔开,linux上用":"隔开。

表达式支持通配符

  1. java -cp .:/Users/username/*.jar packname.mainclassname

打成一个jar包

如果需要将依赖的jar包都达到一个jar包中运行,可以使用maven-shade-plugin这个插件。

这个插件的功能主要是:将依赖的jar包打包到当前jar包,并且在打包的时候把类重命名,可以解决jar包的多版本冲突,具体可以查询官方插件文档。

参考文档

maven官方插件文档

 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持w3xue。

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号