JAVA打包称JAR怎么带上JRE

合集下载

ECLIPSE将引用了第三方JAR包的JAVA项目打包成JAR文件的两种方法

ECLIPSE将引用了第三方JAR包的JAVA项目打包成JAR文件的两种方法

ECLIPSE将引用了第三方JAR包的JAVA项目打包成JAR文件的两种方法在Eclipse中,我们可以使用两种方法将引用了第三方JAR包的Java项目打包成JAR文件。

下面将详细介绍这两种方法。

方法一:使用Eclipse自带的导出功能1. 在Eclipse中,右键单击项目,选择"Export"。

2. 在弹出的对话框中,选择"Java"下的"JAR file",然后点击"Next"。

3. 在"JAR File Specification"页面上,选择要导出的项目以及要导出的资源;在"Export destination"中,指定导出的JAR文件的保存路径和文件名。

4. 在"JAR Packaging Options"页面上,选择"Export generated class files and resources",确保要导出的类文件和资源都被包含在JAR文件中。

5. 在"Select the export destination"页面上,选择"Package required libraries into generated JAR",这将会将所需的第三方JAR包也包含在生成的JAR文件中。

6. 点击"Finish"完成导出。

这种方法的优点是简单快捷,只需要几个简单的步骤就可以完成打包。

但是缺点是生成的JAR文件会将第三方JAR包也放在同一个目录下,可能导致文件夹混乱。

方法二:使用Apache Maven插件打包1. 首先,确保你的项目中存在pom.xml文件,它描述了项目的依赖关系和构建配置。

2. 打开Eclipse的"Terminal"窗口,或者使用其他的命令行工具。

java打jar包的几种方式详解

java打jar包的几种方式详解

java打jar包的⼏种⽅式详解⼀、制作只含有字节码⽂件的jar包我们先来看只含有字节码⽂件,即只含有class⽂件的jar包怎么制作,这是最简单的形式1、最简单的jar包——直接输出hello最终⽣成的jar包结构META-INFHello.class⽅法步骤(1)⽤记事本写⼀个Hello.java的⽂件class Hello{public static void main(String[] agrs){System.out.println("hello");}}(2)⽤命令⾏进⼊到该⽬录下,编译这个⽂件 javac Hello.java(3)将编译后的Hello.class⽂件打成jar包 jar -cvf hello.jar Hello.class c表⽰要创建⼀个新的jar包,v表⽰创建的过程中在控制台输出创建过程的⼀些信息,f表⽰给⽣成的jar包命名(4)运⾏jar包 java -jar hello.jar 这时会报如下错误 hello.jar中没有主清单属性 添加Main-Class属性 ⽤压缩软件打开hello.jar,会发现⾥⾯多了⼀个META-INF⽂件夹,⾥⾯有⼀个MENIFEST.MF的⽂件,⽤记事本打开Manifest-Version: 1.0Created-By: 1.8.0_121 (Oracle Corporation) 在第三⾏的位置写⼊ Main-Class: Hello (注意冒号后⾯有⼀个空格,整个⽂件最后有⼀⾏空⾏),保存 再次运⾏ java -jar hello.jar ,此时成功在控制台看到 hello ,成功2、含有两个类的jar包——通过调⽤输出hello最终⽣成的jar包结构META-INFTom.classHello.class⽅法步骤(1)⽤记事本写⼀个Hello.java和⼀个Tom.java的⽂件 ⽬的是让Hello调⽤Tom的speak⽅法class Hello{public static void main(String[] agrs){Tom.speak();}}class Tom{public static void speak(){System.out.println("hello");}}(2)编译: javac Hello.java 此时Hello.java和Tom.java同时被编译,因为Hello中调⽤了Tom,在编译Hello的过程中发现还需要编译Tom(3)打jar包,这次我们换⼀种⽅式直接定义Main-Class。

java程序打包成exe(伪脱离JVM)

java程序打包成exe(伪脱离JVM)

java程序打包成exe(伪脱离JVM)1前言exe4j是不可以把jre压缩到exe里面的,可以通过安装包的形式实现jre和java程序绑定,但是这样又多了一个安装的过程。

Excelsior JET虽然内置了自己的jre,但是想要在不安装java环境的电脑上运行,也是需要打包成安装程序的。

我们都知道java的运行是离不开jvm的,所以只能实现伪脱离jvm来运行。

简单的说就是自己带一个jvm但是将其隐藏起来,不对用户公开。

本文介绍一种相对而言比较让人满意的java程序打包成exe(伪脱离JVM)的方式,主要利用的工具是exe4j和winrar压缩工具,但是该方式也存在缺陷,就是如果程序包比较大,则自解压缩时间会比较久,看起来就像程序没有反应一样。

而且后面不能带参数运行。

2exe4j将java打包成exe程序2.1创建java示例程序包名可以自定义,目录结构也可以根据自己的需求来安排。

需要注意的一点是:jre一定要选择自己安装的jdk,因为后面要用到该jre(需要将jre拷贝出来)。

HelloWorld.java代码如下:注意:代码中的try-catch模块是必须的,这和我们最终要打包成console程序密切相关,否则就会出现一闪而逝的现象。

即TimeUnit.SECONDS.sleep(20)表示程序运行结束后,20s后退出(参数可以根据实际情况自己设置)。

备注:其他方式实现也可以,比如:Thread2.2java打包成jar在eclipse中,选中项目,右键,选择Exp ort…,选择JAR file,如下图所示:取消掉不需要的说明文件,并选择输出路径:点击Next,Next,然后选择主函数:点击Finish就成功生成JAR文件到我们指定的目录了。

2.3将JAR打包成EXE首先,找到我们在2.1中创建项目指定的jdk版本所对应的jre文件夹,并将其拷贝到我们生成的JAR所在的目录里。

JAR2EXE.ico是我们后面将要用到的图标。

java 打包过程及如何使用第三方jar包

java 打包过程及如何使用第三方jar包

Java 打可执行jar包及如何加入引用包的方法1.选择项目选择Export
2.选择java->JAR file
3.选择next
4.选择next
5.下一步next
6.然后点击Finish结束
7.引用包的使用在test.jar的目录中建lib(文件夹名字随意命名).把用到的第三方jar包
放进去。

目录如下
打开生成的test.jar用解压缩的方式打开
把META-INF下的MANIFEST.MF文件拉出来。

添加用到的引用包
Class-Path:后面一定要有一个空格。

多个包后面以至少一个空格分开。

后面也一定要有两个空行。

(一定要遵守该格式)
然后把文件导入到test.jar包里,即可打开test.jar且保持了原有的功能。

效果图:
这是利用Http-Client打开新浪微博的例子。

希望能帮到你。

精简出最小 jre收藏

精简出最小 jre收藏

精简出最小jre收藏基本知道思路了,我把写的程序打包成jar,能双击运行了,然后拷贝一个jre到程序目录下,具体是这样的,目录叫dict,dict下面有dict.jar、jre(目录),然后写了一个cmd脚本:@echo offset path=%cd%\jre\binjava -jar -verbose:class dict.jar >>class.txtpause这样程序使用的就是当前目录下的jre,程序运行后,最好把所有的功能使用一遍,这样输出了一个文件class.txt,里面有所有需要的class,其格式如下:[Opened D:\data\dict\jre\lib\rt.jar][Loaded ng.Object from D:\data\dict\jre\lib\rt.jar][Loaded java.io.Serializable from D:\data\dict\jre\lib\rt.jar][Loaded parable from D:\data\dict\jre\lib\rt.jar][Loaded ng.CharSequence from D:\data\dict\jre\lib\rt.jar][Loaded poundFileReader$FileEntry fromfile:/D:/data/dict/dict.jar]我们依照这个文件来裁剪rt.jar:首先在utralEdit中进行一些处理,去掉所有不是rt.jar中的class的行,去掉from后面的,去掉loaded等无关项目,再把“.”替换成“/”.这个可以利用正则表达式等轻松处理。

处理完后得到的文件类似如下格式:java/lang/Objectjava/io/Serializablejava/lang/Comparablejava/lang/CharSequencejava/lang/String然后写一个脚本或者程序处理,将rt中需要的的class拷贝到另一个对应的文件夹rt1,我用java写了一个,没有时间仔细改,但能完成人物了。

如何将一个java程序或项目打包成jar与exe文件

如何将一个java程序或项目打包成jar与exe文件

一、先将一个java 程序或项目打包成jar 文件。

1.先在Myeclipses 下添加一个插件 fat jar (1)先把压缩文件解压,将net.sf.fjep.fatjar_0.0.31.jar 放置在你的Myeclipse 的安装目录下。

此为我的Myeclipse 安装目录路径。

如图所示(2)关闭你的Myeclipse ,重新启动。

(3)右键点击你的项目工程名,查看是否有一个 +buile fat jar 选项。

若有,表明完成上面两部,点击next点击finish,将在你指定位置,生成一个可执行jar文件。

查看是否正常。

可能出现的问题:1.所引入的数据库jar包,导入不正确,无法连接数据库。

2.项目中可能添加的图片,在Jar文件中不能正常显示。

解决第二个问题。

如图所示我的项目内容1.在src目录下新建一个Folder 目录文件,将你之前的图片放置进去。

2.修改代码部分:将之前的代码修改为如上所示写法。

整体修改完毕后,重新对项目进行打包操作。

并做测试检查二、将一个可运行的jar文件做成exe文件。

1.先安装exe4j软件。

2.运行软件。

注册窗体进行软件注册用户名,公司名称,随便填写。

注册完毕,回到主窗体。

Next直接点Next第二步我们选择“JAR in EXE mode” 就是选择我们已经有制作好的jar文件。

我的是“桌面\project\”. NEXT由于我的演示程序是图形的,所以选第一个,如果你的程序是控制台的,则选择第二个,Executable name写你将要生成的.exe文件的名字,Icon File可以选择生成文件的图标。

第5步,先别管上面的,先在下面单击绿色的“+”号。

在弹出的窗口中点Archive,然后找到起初已经做好的PetDemo_fat.jar文件,"OK"后返回。

在下面的Class Path里就出现jar文件路径后,再在上面Main Class栏内点击找到main所在的类。

java-jar命令用法

java-jar命令用法

java-jar命令用法java -jar命令是Java平台提供的用于运行独立的Java应用程序的命令。

它可以用于执行任何已经打包成可执行JAR文件的Java应用程序。

在本文中,我们将详细介绍java -jar命令的用法,包括常用选项和示例。

1.语法- 选项:用于指定Java虚拟机的选项,例如-Xmx、-Xms等等,以及其他类似于设置系统属性的选项。

- <jar文件>:要执行的JAR文件的路径。

可以是绝对路径或相对路径。

- 参数:传递给JAR文件的命令行参数。

这些参数将被传递给JAR文件内的主类的main方法。

2.常用选项以下是常见的java -jar命令的选项:- -cp <class search path of directories and zip/jar files>:设置类路径,用于指定Java类的路径,包括目录和JAR文件。

- -Xmx<size>:设置JVM堆的最大大小,例如-Xmx512m表示将JVM的最大堆大小设置为512兆字节。

- -Xms<size>:设置JVM堆的初始大小,例如-Xms256m表示将JVM的初始堆大小设置为256兆字节。

- -Xss<size>:设置线程栈的大小,例如-Xss1m表示将线程栈的大小设置为1兆字节。

- -D<name>=<value>:设置系统属性的值,例如-Djava.awt.headless=true表示将Java的头部设置为无头模式。

- -verbose:class:打印有关类加载器的详细信息,包括类的加载和卸载。

- -verbose:gc:打印有关垃圾回收的详细信息,包括垃圾回收的开始和结束。

- -version:显示Java运行时环境的版本。

3.示例以下是一些java -jar命令的示例:- java -jar MyApp.jar:运行名为MyApp.jar的JAR文件。

IDEA自己编写自定义jar包再导入其他项目并使用

IDEA自己编写自定义jar包再导入其他项目并使用

IDEA自己编写自定义jar包再导入其他项目并使用编写自定义的JAR包并将其导入其他项目是一个非常常见和有用的开发技巧。

通过这种方式,我们可以将一些通用的功能或库封装到一个独立的JAR包中,以便在其他项目中重复使用,提高代码的可复用性和可维护性。

编写自定义的JAR包可以分为以下几个步骤:1. 创建一个新的Java项目:首先,我们需要创建一个新的Java项目,作为我们自定义JAR包的开发环境。

可以使用任何Java开发环境,如Eclipse、IntelliJ IDEA等。

2. 实现功能代码:在创建的Java项目中,实现我们想要封装为JAR 包的功能代码。

这个功能可以是任何自定义的功能,如加密解密算法、文件操作、网络通信等。

在实现功能代码时,需要注意代码的可重用性和可扩展性。

3. 打包为JAR文件:当功能代码实现完成后,我们需要将其打包为一个JAR文件。

在大多数Java开发环境中,可以使用内置的打包工具来生成JAR文件。

在Eclipse中,可以通过右键单击项目,选择"Export",然后选择"JAR file"来创建JAR文件。

4. 导入JAR包:现在我们已经有了一个自定义的JAR文件,可以将其导入到其他项目中使用。

要导入JAR包,可以将其复制到其他项目的类路径下,或者在项目构建工具(如Maven或Gradle)的配置文件中添加JAR包的依赖。

5.使用JAR包:一旦JAR包被成功导入到其他项目中,我们可以在项目中使用JAR包提供的功能。

这可以通过导入JAR包中的类或调用JAR包中的方法来实现。

具体使用方法取决于JAR包中的功能和API设计。

在编写自定义JAR包时,还需要注意以下几点:1.设计良好的API:为了让其他开发人员能够轻松使用我们的JAR包,我们需要设计良好的API。

这包括清晰的类和方法命名、合理的参数和返回值设计、文档注释等。

2. 版本管理:为了方便后续的维护和升级,建议对JAR包进行版本管理。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

让java程序带上精简的jre(附工具)java是跨平台的东西,但有的时候我们不需要它去跨平台,我们希望能想c++做的程序一样,编码和简单处理后能够在系统运行。

这次的项目是要放到classmate pc上,这款机器是为学生订做的,系统资源很有限,一个jre1.5就70多M,放在上面肯定是不行的。

于是我找了一些相关的资料,提供链接如下:如何制作最小的RCP程序压缩包(包含JRE)java程序发布之jre篇基本知道思路了,我把写的程序打包成jar,能双击运行了,然后拷贝一个jre到程序目录下,具体是这样的,目录叫dict,dict下面有dict.jar、jre(目录),然后写了一个cmd脚本:@echo offset path=%cd%\jre\binjava -jar -verbose:class dict.jar >>class.txtpause这样程序使用的就是当前目录下的jre,程序运行后,最好把所有的功能使用一遍,这样输出了一个文件class.txt,里面有所有需要的class,其格式如下:[Opened D:\data\dict\jre\lib\rt.jar][Loaded ng.Object from D:\data\dict\jre\lib\rt.jar][Loaded java.io.Serializable from D:\data\dict\jre\lib\rt.jar][Loaded parable from D:\data\dict\jre\lib\rt.jar][Loaded ng.CharSequence from D:\data\dict\jre\lib\rt.jar][Loaded poundFileReader$FileEntry from file:/D:/data/dict/dict.jar]我们依照这个文件来裁剪rt.jar:首先在utralEdit中进行一些处理,去掉所有不是rt.jar中的class的行,去掉from后面的,去掉loaded 等无关项目,再把“.”替换成“/”.这个可以利用正则表达式等轻松处理。

处理完后得到的文件类似如下格式:java/lang/Objectjava/io/Serializablejava/lang/Comparablejava/lang/CharSequencejava/lang/String然后写一个脚本或者程序处理,将rt中需要的的class拷贝到另一个对应的文件夹rt1,我用java写了一个,没有时间仔细改,但能完成人物了。

代码如下:import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStreamReader;import java.io.LineNumberReader;public class ReduceRt {//文件拷贝public static boolean copy(String file1,String file2){try //must try and catch,otherwide will compile error{// instance the File as file_in and file_outjava.io.File file_in=new java.io.File(file1);java.io.File file_out=new java.io.File(file2);FileInputStream in1=new FileInputStream(file_in);FileOutputStream out1=new FileOutputStream(file_out);byte[] bytes=new byte[1024];int c;while((c=in1.read(bytes))!=-1)out1.write(bytes,0,c);in1.close();out1.close();return(true); //if success then return true}catch(Exception e){System.out.println("Error!");return(false); //if fail then return false}}//读取路径,copypublic static int dealClass(String needfile ,String sdir,String odir) throws IOException {int sn = 0; //成功个数File usedclass = new File(needfile);if(usedclass.canRead()){String line = null;LineNumberReader reader = new LineNumberReader(new InputStreamReader(newFileInputStream(usedclass),"UTF-8"));while((line = reader.readLine())!=null){line = line.trim();int dirpos =stIndexOf("/");if(dirpos>0){String dir = odir+ line.substring(0,dirpos);File fdir = new File(dir);if(!fdir.exists())fdir.mkdirs();String sf = sdir + line + ".class";String of = odir + line + ".class";boolean copy_ok=copy(sf.trim(),of.trim());if(copy_ok)sn++;else{System.out.println(line);}}}}return sn;}public static void main(String[] args){String needfile = "usedclass.txt";String sdir = "./rt/";String odir = "./rt1/";try {int sn = dealClass(needfile,sdir,odir);System.out.print(sn);} catch (IOException e) {// TODO 自动生成 catch 块e.printStackTrace();}}}我裁剪出来的rt大小为500多k。

然后将rt1里面的目录和文件打包成rt.zip,改名为rt.jar,然后替换原来的rt.jar。

具体的步骤可以参考上面提到的那两篇文章。

#######################如何制作最小的RCP程序压缩包(包含JRE)Java开发程序,发布时总要考虑的问题就是怎么在使用者的机器上装好JRE。

要考虑的问题很多:使用者有没有能力独自安装JRE,使用者已有的 JRE 和我们需要的版本是不是一致,会不会出现版本问题,等等。

使用.NET要考虑的问题就少些。

现在.NET CLR似乎已经很普及了,看好多D版的 Win XP都会自己安装最新的.NET CLR,而且似乎它的安装界面也比JRE友好些。

彻底解决安装JRE的问题的方案,就是让我们的应用程序自己背着JRE!这样,我们的程序就像传统的Win32应用程序一样,双击就可以执行,不用管所在的机器上是否有JRE,是什么版本的JRE,无论怎样,我有我自己的!要做到这一点,其实非常容易。

王森在他的《Java深度历险》(强力推荐这本书,内容少而精)的第一章就解释了JDK,JRE,JVM之间的关系。

解释了我们执行java.exe时发生的事情。

其中提到,java.exe依照一套逻辑来寻找可以用的JRE,首先查找自己所在的目录下有没有 JRE(据王森讲这样说不确切,我没有JDK全部的源代码,在此无从考证);其次查找自己的父目录下有没有JRE;最后才是查询Windows的注册表。

通常我们在安装好了JRE的机器上的任何一个目录下都可以执行java.exe。

因为它在安装时被复制到了windows的system32目录下,而后者无论如何都会在path环境变量中。

这个java.exe最终必然会访问注册表来确定真正的JRE的所在地。

若我们要求每一个应用程序都自带JRE,必然不能走这条路。

但,逻辑的第二条讲,java.exe会在它的父目录下查找JRE,解决方案就在这一条中。

假设我们的应用程序打好了包,叫做 MyApp.jar,放在MyApp的目录下。

我们在MyApp目录下,可以执行java ?jar MyApp.jar来运行我们的程序。

我们安装的是 JRE 1.5,在C:\Program Files\Java\jre1.5.0下。

现在,我们只需要简单的将jre1.5.0目录搬到MyApp目录下,顺便改个容易写的名字比如叫jre。

现在,我们的应用程序就象这样:MyAppMyApp.jarJreJre1.5.0目录下的全部内容Java.exe 就在jre目录下的bin目录中。

根据第二条逻辑,java.exe会在它的父目录中查找jre,实验证实,它会查找lib目录,而lib就在jre目录下。

因此,这样java.exe就会确定jre的所在然后正常执行java程序,不会去管我们是否安装了JRE,注册表中是否有注册项这些杂事了。

试一下,在命令行下进入MyApp的目录下,假设它在C盘,将path指向MyApp下的JRE:set path=c:\MyApp\jre\bin然后运行:java ?verbose ?jar MyApp.jar加上verbose参数以确定我们确实用了这一套被搬出了家的JRE。

程序可以运行,并且在命令行输出的前几行,可以看到:[Opened C:\MyApp\jre\lib\rt.jar][Opened C:\MyApp\jre\lib\jsse.jar][Opened C:\MyApp\jre\lib\jce.jar][Opened C:\MyApp\jre\lib\charsets.jar]因此程序读取的确实是它的私有的JRE。

相关文档
最新文档