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

maven工程打包jar以及java jar命令的classpath使用

一、maven工程打包成jar文件插件。

<plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <version>2.3.2</version>
        <configuration>
            <archive>
            <manifest>
                <mainClass>com.wjl.Main</mainClass>
                <!--
                <addClasspath>true</addClasspath>
                <classpathPrefix>lib/</classpathPrefix> 
                -->
            </manifest>
        </archive>
    </configuration>
</plugin>

二、打包完工程的jar和依赖都在同一目录。

图片描述

(1)如果通过maven打包时,指定了<addClasspath>且正确。其效果完全等价于其他打包方式,自己在MANIFEST.MF指定好了Class-Path。
此时,运行的命令,直接运行jar包即可。

java -jar hello-test-0.0.1-SNAPSHOT.jar

(2)如果没有指定<addClasspath>和<classpathPrefix>,或者手动设置MANIFEST.MF。此时,即便依赖的jar包都在相同目录下,指定运行的classpath。
这个时候,容易想当然,把命令错误的写成:

//错误展示
java -cp jackson-core-asl-1.9.4.jar:jackson-mapper-asl-1.9.4.jar -jar hello-test-0.0.1-SNAPSHOT.jar

实际上正确的写法应该是:

java -cp jackson-core-asl-1.9.4.jar:jackson-mapper-asl-1.9.4.jar:hello-test-0.0.1-SNAPSHOT.jar  com.wjl.Main

通过指定当前目录的方式,可以缩写为:

java -cp ./*:hello-test-0.0.1-SNAPSHOT.jar com.wjl.Main

三、如果运行的jar和依赖不在同一目录。

图片描述

这个情况简单就是maven插件指定了<addClasspath>为true,同时指定了<classpathPrefix>。
这样生成的MANIFEST.MF的classpath,都会在每个jar包的路径上带上prefix,使得java命令可以找到。

如果没有这样配置,那么就要在运行命令时,指定classpath了,命令如下:

java -cp lib/*:hello-test-0.0.1-SNAPSHOT.jar com.wjl.Main

四、maven插件把依赖的所有jar包找出来

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-rar-plugin</artifactId>
    <version>2.4</version>
</plugin>

配置该插件,然后需要执行命令 mvn rar:rar 。

相关文章:

  • ss 命令,第二代net-tools
  • Windows Iot:让Raspberry Pi跑起来(1)
  • js 点击弹窗以外 关闭弹窗
  • 几种经典排序算法的JS实现
  • solr多条件查询(二)
  • 网络基础(一)ARP!!!
  • Java NIO系列教程(一) Java NIO 概述
  • function name address vs array name address
  • 关于加载本地加载ga.js文件的问题
  • Jdev Run Page 没有反应
  • spring3 的restful API RequestMapping介绍
  • SQL数据库还原时备份集中的数据库备份与现有的数据库不同的解决办法
  • 单元测试
  • 我理解的--java门面模式
  • yii create url (一)
  • 【译】理解JavaScript:new 关键字
  • Android 控件背景颜色处理
  • classpath对获取配置文件的影响
  • const let
  • CSS实用技巧
  • es6
  • JS函数式编程 数组部分风格 ES6版
  • JS学习笔记——闭包
  • magento 货币换算
  • Making An Indicator With Pure CSS
  • mysql中InnoDB引擎中页的概念
  • pdf文件如何在线转换为jpg图片
  • PHP 7 修改了什么呢 -- 2
  • React-redux的原理以及使用
  • 关于字符编码你应该知道的事情
  • 今年的LC3大会没了?
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 网络应用优化——时延与带宽
  • 微服务框架lagom
  • 《天龙八部3D》Unity技术方案揭秘
  • 策略 : 一文教你成为人工智能(AI)领域专家
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • ​渐进式Web应用PWA的未来
  • #define
  • #laravel 通过手动安装依赖PHPExcel#
  • (0)Nginx 功能特性
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (三)docker:Dockerfile构建容器运行jar包
  • (三十五)大数据实战——Superset可视化平台搭建
  • .bat批处理(三):变量声明、设置、拼接、截取
  • .net oracle 连接超时_Mysql连接数据库异常汇总【必收藏】
  • .NET WebClient 类下载部分文件会错误?可能是解压缩的锅
  • .NET 程序如何获取图片的宽高(框架自带多种方法的不同性能)
  • .NET 药厂业务系统 CPU爆高分析
  • .NET4.0并行计算技术基础(1)
  • .NetCore实践篇:分布式监控Zipkin持久化之殇
  • .NET大文件上传知识整理
  • .NET简谈互操作(五:基础知识之Dynamic平台调用)
  • .net网站发布-允许更新此预编译站点
  • @SentinelResource详解