详解用maven将dubbo工程打成jar包运行

 更新时间:2019年04月29日 15:01:15   转载 作者:sf4y  
这篇文章主要介绍了详解用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官方插件文档

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

相关文章

  • Java多线程用法的实例详解

    Java多线程用法的实例详解

    这篇文章主要介绍了Java多线程用法的实例详解的相关资料,希望通过本文大家能够理解掌握这部分内容,需要的朋友可以参考下
    2017-09-09
  • 关于JAVA中this的使用方法小结

    关于JAVA中this的使用方法小结

    现在让大家看一个小例子,给你分享一下JAVA中“this”的用法,有需要的朋友可以参考一下
    2013-10-10
  • Java编程实现二项分布的采样或抽样实例代码

    Java编程实现二项分布的采样或抽样实例代码

    这篇文章主要介绍了Java编程实现二项分布的采样或抽样实例代码,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • springboot 定时任务@Scheduled实现解析

    springboot 定时任务@Scheduled实现解析

    这篇文章主要介绍了springboot 定时任务@Scheduled实现解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • java中thread线程start和run的区别

    java中thread线程start和run的区别

    这篇文章主要介绍了java中thread线程start和run的区别,run()是Runnable接口中定义的一个方法,是为了让客户程序员在这个方法里写自己的功能代码的。直接调用和普通的类调用自己的成员方法是没有任何区别的
    2014-03-03
  • Java中实现获取路径的方法汇总

    Java中实现获取路径的方法汇总

    本文给大家汇总分享的是Java中实现获取路径的方法,非常的简单实用,需要的小伙伴可以参考下。
    2015-03-03
  • Java中List  Set和Map之间的区别_动力节点Java学院整理

    Java中List Set和Map之间的区别_动力节点Java学院整理

    Java集合的主要分为三种类型set集,list列表,map映射,接下来通过本文给大家详细介绍java中list、Set和Map之间的区别,需要的的朋友参考下吧
    2017-05-05
  • java中struts配置

    java中struts配置

    本文给大家详细分析了在java项目中配置Struts的方法和示例,十分的简单实用,有需要的小伙伴可以参考下。
    2015-06-06
  • Spring集成Quartz的简单配置的方法

    Spring集成Quartz的简单配置的方法

    本篇文章主要介绍了Spring集成Quartz的简单配置的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • java 保留两位小数的几种方法

    java 保留两位小数的几种方法

    这篇文章主要介绍了JAVA中小数点后保留两位的几种方法,并有小实例,希望能帮助有所需要的同学
    2016-07-07

最新评论