文档章节

可执行的jar包始末

laichendong
 laichendong
发布于 2014/06/25 09:27
字数 606
阅读 45
收藏 0
点赞 0
评论 0
bud(我写的一个基于模板大代码生成器)需要发布成一个可执行的jar。在打包和运行的时候遇到了一些问题,这里记录下来。 在idea中创建jar的方式是构建项目的artifact。使用快捷键: ctrl+alt+shift+s  弹出Project Structure 对话框。选中左边的artifacts就可以添加了。 20130128224728   创建过程根据提示,指定可main方法所在类,Apply! Build -> Build Artifacts... 万事ok! 是吗? 使用
java -cp a.jar -jar xxx.jar
一调用,报错了!显示:
Error: Invalid or corrupt jarfile bud.jar
怎么回事? 原来idea并没有把MANIFEST.MF打进去!没有这个文件,找不到main方法,自然报错了。于是加入MANIFEST.MF,内容如下:
Manifest-Version: 1.0
Main-Class: com.jd.pop.bud.BudMain
再运行,说ClassNotFound ,可是我明明在运行的命令中指定了-cp参数来指定classpath。为什么还会找不到类呢?继续google。找到 一篇文章说“当用java -jar yourJarExe.jar来运行一个经过打包的应用程序的时候,你会发现如何设置-classpath参数应用程序都找不到相应的第三方类,报ClassNotFound错误。” 这个和我现象是一样的。于是结合文中和 官方的指导,重新编写了manifest.mf:
Manifest-Version: 1.0
Class-Path: lib\commons-collections-3.2.1.jar lib\commons-io-2.0.1.jar lib\commons-lang-2.6.jar lib\dom4j-1.6.1.jar lib\jaxen-1.1.1.jar lib\log4j-1.2.17.jar lib\mysql-connector-java-5.1.17.jar lib\ojdbc14-10.2.0.4.jar lib\velocity-1.7.jar lib\xml-apis-1.0.b2.jar
Main-Class: com.jd.pop.bud.BudMain
( 由于我发布的结构是第三方jar在lib目录下,所以Class-Path里每个jar前都加了lib\做限定)再次运行,果然!可以找到依赖的jar了。但是一波未平,一波又起,这次跑出来了一个NullPointException!查看代码发现是: Thread.currentThread().getContextClassLoader().getResource("") 为null。为什么呢?这本是用来获取classPath更路径的代码。怎么这个也受影响了。想来想去应该是获取不到当前的classPath。于是在manifest.mf的classPath中加上 . 。再次尝试运行。一切正常! 总结一下,这次一共遇到几个问题:
  1. 如何打可执行的jar包,在idea中,除了制定main class外,还需要记得吧Mainfest放进去
  2. java -jar xxx.jar执行jar且依赖第三方jar时,需要在mainfest中指定依赖jar的链接,而是采用java的-cp参数
  3. mainfest.mf的Class-Path中需要加上. 才能在代码中去掉classpath根路径。

© 著作权归作者所有

共有 人打赏支持
laichendong
粉丝 8
博文 85
码字总数 71483
作品 0
朝阳
程序员
用Maven快速生成带有依赖的可执行jar包

一、背景   最近项目在做微服务的拆分,那么我们想让我们的容器启动更加的轻量级,所以我们选择放弃tomcat等容器,而是通过maven生成带有指定依赖的可执行jar包的方式进行处理,本文我将分...

hafiz.zhang ⋅ 2017/03/12 ⋅ 0

纯 Java 的可视化分布式计算平台--SimpleDistributedPlatform

一个简单却实用的分布式计算平台,通过提交任务 jar 包来执行分布式任务。 NameNode 和 DataNode 这两个名字是直接引用的 Hadoop 里面的概念,但是更加简化: NameNode:用于分发可执行 jar ...

抗争的诗人 ⋅ 2017/07/18 ⋅ 0

将Java程序作成exe文件的N种方法

使用制作可执行 JAR 文件包 下面就来看看什么是 JAR 文件包吧: a) JAR 文件包 JAR 文件就是 Java Archive File,顾名思意,它的应用是与 Java 息息相关的,是 Java 的一种文档格式。JAR 文件...

楓楪 ⋅ 2014/03/13 ⋅ 0

Linux下使用java -jar运行可执行jar包的正确方式

问题来源 一般来说,一个稍微大些的项目都会有一些依赖的Jar包,而在将项目部署到服务器的过程中,如果没有持续集成环境的话,也就是说服务器不支持在线编译及打包,那么需要自己上传依赖的J...

u013063153 ⋅ 2017/03/21 ⋅ 0

[笔记] JAR 包详解

java jar包 常用来运行java程序的压缩包。今天就来看看内幕。 简介 维基百科 在软件领域,JAR文件(Java归档,英语:Java ARchive)是一种软件包文件格式,通常用于聚合大量的Java类文件、相...

___k先生 ⋅ 2017/12/16 ⋅ 1

制作可执行的JAR文件包及jar命令详解

常常在网上看到有人询问:如何把 java 程序编译成 .exe 文件。通常回答只有两种,一种是制作一个可执行的 JAR 文件包,然后就可以像.chm 文档一样双击运行了;而另一种是使用 JET 来进行 编译...

xinyitianii ⋅ 2014/07/09 ⋅ 0

Java打包指南-JAR文件包及jar命令详解

常常在网上看到有人询问:如何把 java 程序编译成 .exe 文件。通常回答只有两种,一种是制作一个可执行的 JAR 文件包,然后就可以像.chm 文档一样双击运行了;而另一种是使用 JET 来进行 编译...

roockee ⋅ 2011/11/29 ⋅ 0

抗争的诗人/SimpleDistributedPlatform

SimpleDistributedPlatform A very simple distributed computing platform, based on mq and naming service Email: lnwazg@126.com QQ: 914096874 QQ Group: 304153330 一:平台效果: Na......

抗争的诗人 ⋅ 2017/07/25 ⋅ 0

Java开发好工具集合

Eclipse插件类 Fat jar 优:多个jar包合成;缺:文件夹结构不保持 Fat Jar Eclipse Plug-In是一个可以将Eclipse Java Project的所有资源打包进一个可执行jar文件的小工具,可以方便的完成各种...

拉风的道长 ⋅ 2015/08/04 ⋅ 0

Maven项目打包成可执行Jar文件

Maven项目打包成可执行Jar文件 在使用Maven完成项目以后,如果是需要打包成可执行的Jar文件,我们通过eclipse的导出很麻烦,还得指定入口文件的位置,还得说明依赖的jar包,既然都使用Maven...

Carl_ ⋅ 2015/09/17 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Thrift RPC实战(二) Thrift 网络服务模型

TServer类层次体系 TSimpleServer/TThreadPoolServer是阻塞服务模型 TNonblockingServer/THsHaServer/TThreadedSelectotServer是非阻塞服务模型(NIO) 1 TServer抽象类的定义 内部静态类Args的...

lemonLove ⋅ 9分钟前 ⋅ 0

vim命令用法

第五章 vim命令 vim和vi几乎是一样的,唯一的区别就是当编辑一个文本时,使用vi不会显示颜色,而使用vim会显示颜色。 vim有三个模式:一般模式,编辑模式,命令模式。 系统最小化安装时没有安...

弓正 ⋅ 10分钟前 ⋅ 0

MyBatis源码解读之配置

1. 目的 本文主要介绍MyBatis配置文件解析,通过源码解读mybatis-config.xml(官方默认命名)、Mapper.xml 与Java对象的映射。 2. MyBatis结构 查看大图 MyBatis结构图,原图实在太模糊了,所以...

无忌 ⋅ 14分钟前 ⋅ 0

Ignite的jdbc与网格的连接方式的查询性能对比

环境: 数据量100万 Ignite2.5 Windows10 8g jdbc方式连接 import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; i......

仔仔1993 ⋅ 29分钟前 ⋅ 0

收集自网络的wordpress 分页导航的代码教程(全网最全版)

wordpress 分页导航是用来切换文章的一个功能,添加了 wordpress 分页导航后,用户即可自由到达指定的页面数浏览分类文章,而这样的一个很简单功能却有很多朋友在用插件:WP-PageNavi,插件的...

Rhymo-Wu ⋅ 45分钟前 ⋅ 0

微服务 WildFly Swarm 入门

Hello World 就像前面章节中的其他框架一样,我们希望添加一些基本的 Hello-world 功能,然后在其上逐步添加更多的功能。让我们从在我们的项目中创建一个 HolaResources 开始。您可以使用您的...

woshixin ⋅ 52分钟前 ⋅ 0

Maven的安装和Eclipse的配置

1. 下载Maven 下载地址 2. 解压压缩包,放到自己习惯的硬盘中 此处我将其放到了 D:\Tools 目录下。 3. 配置环境变量 右键此电脑 -> 属性 -> 高级系统设置 -> 环境变量。 在系统变量中新建,变...

影狼 ⋅ 59分钟前 ⋅ 0

python pip使用国内镜像的方法

国内源 清华:https://pypi.tuna.tsinghua.edu.cn/simple 阿里云:http://mirrors.aliyun.com/pypi/simple/ 中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/ 华中理工大学:http://......

良言 ⋅ 今天 ⋅ 0

对于url变化的spa应该如何使用微信jssdk

使用vue单页面碰上微信jssdk config验证失败的坑。第一次成功 之后切换页面全部失败,找到了解决方法,第一次验证成功后保存验证信息 切换页面时验证信息直接拿来用,加一个wx.error() 失败时...

孙冠峰 ⋅ 今天 ⋅ 0

Spring Cloud Gateway 一般集成

SCF发布,带来很多新东西,不过少了点教程,打开方式又和以前的不一样,比如这个SCG,压根就没有入门指导,所以这里写一个,以备后用。 一、集成 pom.xml <dependency> <groupI...

kut ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部