精华内容
下载资源
问答
  • JAVA代码打包工具

    2018-01-16 23:52:00
    非常小,非常好用的一款JAVA打包工具,经过验证,值得下载!
  • java自动打包工具

    2012-12-05 15:27:00
    介绍下这个打包工具 把本次你改动的java工程下的文件对应的class文件自动打包,然后热部署发布即可 如果你需要频繁改动java代码,热发布几个文件到服务器上,你会怎么做呢? 没有工具的人会手动拷贝目录 然后到...
  • java代码打包加密工具

    2017-03-20 14:24:52
    很好用的
  • 软件介绍: 在eclipse中将Java项目打包为exe所需工具,先安装exe4j,装完后运行,然后用内附的注册机生成一个序列号,输入到程序里面即可。
  • exe4j是一款功能强大的打包工具,通过该软件,用户可以快速的将自己编写的程序直接打包为EXE格式的文件进行保存,与软件的名字一样,这个工具的主要对象就是Java程序,通过Java编写的程序可以快速构建为能够适应...
  • exe4j,64位和32下载,将java运行程序打包成jar,为了安全性防止对编译后的class文件进行反编译,可以将jar文件打包成 exe的可运行文件,通过exe4j工具轻易完成
  • apk打包工具java

    2014-08-22 15:40:46
    java版的对apk进行打包的源码,需要的可以研究下
  • 前言:Java软件程序以其跨平台的特性被广泛使用于各类操作系统中,目前有部分需求是需要将Java程序打包成EXE可执行文件,可以实现在任意一台Windows系统下安装使用,而不需要冗余的资源文件,只要一个简单的exe安装...

    前言:Java软件程序以其跨平台的特性被广泛使用于各类操作系统中,目前有部分需求是需要将Java程序打包成EXE可执行文件,可以实现在任意一台Windows系统下安装使用,而不需要冗余的资源文件,只要一个简单的exe安装文件即可安装使用。

    实现以上需求,四步法:
    1、Java应用程序的编写(控制台、GUI均可)
    2、使用IDE将Java应用程序导出可执行.jar文件
    3、使用exe4j工具将 .jar文件打包为可执行的.exe文件
    4、使用Inno Setup工具将可执行的.exe文件以及资源文件打包压缩为可安装.exe文件

    • 本文使用的所有工具下载均可访问本人github进行下载(exe4j、Inno Setup、jar运行环境(32位))

    本文实现第一步骤:Java应用程序的编写(控制台、GUI均可)(这里以GUI程序为例)

    本文使用的测试环境:jdk1.8.0_171,IDE环境为Eclipse IDE for Java Developers

    实现一个简单Java GUI应用程序

    1、新建工程

    打开Eclipse,在左侧的资源管理一栏,鼠标右击弹->new->Java Project,填写项目名称(经典的HelloWorld),直接Finish。

    项目建立完成,将图片、库资源拷贝到相应的位置,以备后用(目录与树如下)

    2、代码编写

    HelloWorld.java
    package dainelcw;
    
    import java.awt.FlowLayout;
    import java.awt.Font;
    import java.awt.Image;
    import java.awt.Toolkit;
    import javax.swing.ImageIcon;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JOptionPane;
    import javax.swing.JPanel;
    import javax.swing.SwingUtilities;
    import javax.swing.UIManager;
    import org.jb2011.lnf.beautyeye.BeautyEyeLNFHelper;
    
    public class HelloWorld extends JFrame{
    	
    	public HelloWorld(){
    		setTitle("HelloWorld");
    		setSize(500, 400);
    		//设置程序的显示位置
    		setLocation(getCenterLocation(1), getCenterLocation(2));
    	}
    	
    	public static void main(String args[]) {
    		try{
    			//风格设置
    			BeautyEyeLNFHelper.launchBeautyEyeLNF();
    			HelloWorld frame = new HelloWorld() ;
    			UIManager.put("RootPane.setupButtonVisible", false);
    			SwingUtilities.updateComponentTreeUI(frame);
    			
    			//图标
    			Toolkit tk=Toolkit.getDefaultToolkit();
    			Image image=tk.createImage(System.getProperty("user.dir")+"\\image\\icon.png"); 
    			frame.setIconImage(image);
    			//背景
    			ImageIcon img=new ImageIcon(System.getProperty("user.dir")+"\\image\\bg1.jpg");//设置的图片路径	
    			img.setImage(img.getImage().getScaledInstance(frame.getWidth(), frame.getHeight(),Image.SCALE_DEFAULT ));
    			//将背景图片放在标签里
    			JLabel imgLabel=new JLabel(img);
    			//将背景标签添加到jfram的LayeredPane面板里。
    			frame.getLayeredPane().add(imgLabel, new Integer(Integer.MIN_VALUE));
    			//设置背景标签的位置 
    			imgLabel.setBounds(0,0,img.getIconWidth(), img.getIconHeight());
    			JPanel jp = (JPanel)frame.getContentPane();
    			jp.setOpaque(false);
    			
    			JLabel label = new JLabel("HelloWorld");
    			label.setFont(new Font("宋体", Font.BOLD, 30));
    			frame.setLayout(new FlowLayout());
    			frame.add(label);
    			
    			//显示
    			frame.setVisible(true);
    		}catch(Exception e){
    			JOptionPane.showMessageDialog(null, e);
    		}
    	}
    	//获取屏幕的大小并得到中心位置
    	public int getCenterLocation(int type) {
    		double width = Toolkit.getDefaultToolkit().getScreenSize().getWidth();
    		double height = Toolkit.getDefaultToolkit().getScreenSize().getHeight();
    		if(type == 1) {
    			return (int) (width - this.getWidth()) / 2;
    		}else {
    			return (int) (height - this.getHeight()) / 2;
    		}
    	} 
    }
    

    3、运行

    右击项目->Run As->Java Application(这里增加了一个主题库[MAC风格])

    在这里插入图片描述

    通过以上步骤你就可以编写一个简单的Java GUI应用程序啦!下一步就是生成JAR文件。

    导出可运行JAR文件

    1、导出jar

    右击项目->Export->Runnable JAR File(生成过程若有警告提示[直接忽略],直接ok即可)
    HelloWorld.jar文件生成后,本人是将jar文件拷到我工程的文件夹内,再者将资源文件一并拷入本文件夹(若不拷贝资源,运行时图片将加载不出来),文件夹内容如下:

    在这里插入图片描述

    2、运行验证JAR文件

    运行jar文件的简单方法就是命令行运行。
    快捷打开命令行的方法:在文件夹内按Shift键鼠标右击,在右键菜单里会有一个选项“在此处打开命令窗口(W)”,点击即可进入命令行窗口
    若鼠标右键菜单里没有此选项则通过以下方法打开:
    按组合键win+r,输入cmd即可打开,然后使用cd命令进入文件夹内
    在命令行窗口输入:java -jar HelloWorld.jar
    回车

    在这里插入图片描述

    若看到以上结果则表明导出JAR文件成功,否则再根据步骤重新导出

    exe4j打包exe

    1、exe4j下载安装

    本人已将exe4j安装包放入个人github里,各位游客可以进入自行下载。
    下载完成安装也是傻瓜式安装,无需配置任何参数(安装路径除外,看个人爱好)

    2、运行exe4j并打包

    在这里插入图片描述

    直接点击Next,在弹出的窗口里选择“JAR in EXE” mode

    在这里插入图片描述

    Next,在弹出的窗口里填写所需内容
    1:项目名称,这里我们填写:HelloWorld
    2:点击选择按钮,选择exe文件的输出路径(这里我选择的是jar的文件位置)

    在这里插入图片描述

    Next,在弹出窗口选择GUI应用,输入输出exe文件名称,选择图标ico文件

    在这里插入图片描述

    Next,弹出窗口填写内容
    VM Parameters:-Dfile.encoding=utf-8 (防止出现乱码)
    Class Path:点击右侧的绿色的加号,将导出的jar文件和lib文件添加进来
    Main class:点击右侧的选择按钮,选择主类即可

    在这里插入图片描述

    Next,弹出的窗口为JRE运行环境的配置
    最小版本:1.7
    最大版本:(可不填)
    填完之后点击下图左侧画横线的部分,进入运行环境自定义配置界面

    在这里插入图片描述

    点击后弹出以下界面,将画圈的几项选中,点击右侧的红叉按钮将其删去,清空完成之后,点击绿色添加按钮,添加准备好的jre运行环境的目录路径

    在这里插入图片描述
    在这里插入图片描述

    删除添加JRE完成之后的结果图如下:

    在这里插入图片描述

    接着一路欢快的Next就可以啦,直到完成

    在这里插入图片描述

    到这里jar转exe就已经完成了,想不想运行看看,来我们接着走~
    可以直接点击exe4j界面的“Click Here to Start the Application”,也可以直接到我们生成的目录里双击exe文件运行

    到此jar文件转exe可执行文件就大功告成!
    可是存在一个问题就是,exe文件执行需要依赖于资源文件,如JRE运行环境、图片资源、库文件等,无法实现在任意一台电脑上运行,下面我们就将exe与其所需的资源文件一起打包成为一个独立的exe安装文件,可在任一一台Windows电脑运行(32位、64位均可)

    Inno Setup打包压缩安装.exe

    1、下载安装Inno Setup

    这一步骤也没什么可说的,文件下载地址本人github
    下载完成,找到对应版本安装即可

    2、运行Inno Setup 并打包exe安装文件

    运行Inno Setup,新打开的窗口都会弹出欢迎窗口,在窗口中选择“用[脚本向导]创建新的脚本文件(S)”
    点击确定

    在这里插入图片描述
    在这里插入图片描述

    直接下一步
    在此窗口中填写以下内容
    应用程序名称:HelloWorld
    应用程序版本:1.0
    应用程序发布者:Dainelcw(这里可以写自己的名字)
    应用程序网站:https://github.com/Dainelcw (这里可以自定义)

    在这里插入图片描述

    点击下一步
    这里也不需要填写什么,直接下一步

    到达这里我们要对目录重新设定一番,新建一个文件夹命名为exesetup
    将image、javaJre文件夹、icon图标拷入exesetup文件夹内
    注意:image、javaJre文件夹都要为双层目录(后面有用)(具体如下图所示)

    在这里插入图片描述

    文件夹建立完成,回到Inno Setup
    点击浏览,选择前面exe4j生成的exe文件
    点击选择文件夹,选择exesetup文件夹内的image和javaJre文件夹(均选择第一层文件夹)
    点击下一步

    下一步

    直到这一步

    在这里插入图片描述

    选择输出文件夹
    输入输出文件名
    输出文件的图标(可不选)
    安装密码(可不填)
    选择完成后,点击下一步,直至完成
    这里会提示你“现在你要立即编译新的脚本吗?”,选择是
    接着弹出问你是否保存脚本,选择是,然后弹出填写脚本文件名的窗口,随便一个名字即可,点击保存
    等待编译成功
    编译成功后,到输出文件夹下查看:
    1、导出的jar 2、exe4j生成的exe(可执行) 3、Inno Setup生成的exe(可安装)

    在这里插入图片描述

    安装测试

    双击setup.exe文件,选择安装路径

    在这里插入图片描述

    一直下一步,直至安装完成。
    我们到F盘看一下安装解压的文件(我安装路径选择的是F盘)

    至此,Java软件打包EXE安装文件流程完成,若想卸载程序,直接双击unins000.exe即可卸载清除文件!

    • 本文源码及资源文件打包下载:如果您是积分大佬CSDN下起来,如果没有积分没关系,我已放入github上本人github
    展开全文
  • exe4j自带jre是通过使用教程进行安装能够帮助你实现java可执行程序jar的生成工具,进而完成jar包转exe,能够帮助用户顺畅的进行java编程工作,节省了大量转换时间是一款便捷快速的转换工具...
  • j2ewiz(java 转EXE工具)介绍 java 程序编译后得到的 class 文件,不能够直接运行。通常采用的通过批处理文件启动 java 程序的办法非常麻烦。转换成 exe 文件之后,发布和运行 java 程序就非常简单和方便 j2ewiz...
  • java web 项目打包、加密工具

    热门讨论 2012-06-18 17:08:17
    Jinstall打包工具通过对class文件进行256位高强度加密,对您的项目进行绝对安全的保护。通过将web项目整合到一个exe文件中,实现加密、打包、安装一步到位。真正做到了安全、简单、方便! ----------------------...
  • java程序打包工具

    2008-10-12 10:21:30
    打包工具打包工具打包工具打包工具打包工具打包工具
  • Advanced Installer 程序打包工具(汉化版)新版14.9 精心收集
  • HTML一键打包工具

    2019-02-22 15:07:36
    可以把html打包成可安装的exe文件,然后给人的感觉就是软件
  • Java代码合并工具

    2018-11-06 21:22:17
    Python编写的Windows小工具,内含源代码及打包好的EXE程序。相关文章点这里</a>
  • Java应用软件打包工具

    2008-06-23 12:22:06
    java应用程序打包成可安装的exe文件所需的软件,包括exe4j,innfo setup, 还有详细的指导
  • JAVA加密工具

    2012-08-18 12:00:58
    Jinstall打包工具通过对class文件进行256位高强度加密,对您的项目进行绝对安全的保护。通过将web项目整合到一个exe文件中,实现加密、打包、安装一步到位。真正做到了安全、简单、方便! ----------------------...
  • 实用的java反编译工具,混淆打包的也可以反编译
  • install4j是一个功能强大的,多平台Java安装文件生成工具,用于生成Java应用程序本地化的安装及应用程序发布。 install4j 的优异性在于它易于使用,紧密的集成到目标平台,以及灵活的JRE 管理与部署选项。
  • Smart Install Maker 是一款创建打包安装程序的软件。是一款适合电脑初学者使用的安装程序制作工具。本软件使用简单,上手方便,功能齐全,不需要编写一行代码或脚本,就可制作出非常专业的安装程序,特别适合于从没...
  • 如何把一个java程序打包成exe文件.doc

    热门讨论 2012-04-22 07:57:29
    核心提示:首先,将编译好的程序打包成jar文件,然后做出exe,这样代码就不可见了;但是exe文件在没有安装jre的电脑上不能运行,如果要求客户再去安装jre 设置环境...使用这几个工具,您也可以顺利的发布您的java程序!
  • 工具篇(Java)--- 增量打包

    千次阅读 2018-09-29 14:38:07
    由于大多的生产环境都采用的是增量发版,因此需要把把改变的代码打包,本文采用的是使用Java代码对 SVN上的更新记录选择后进行打包 准备 到项目的SVN管理出找到历史更新记录,选择要打包的记录然后生成变更到...

    目录

    概述

    准备

    源码增量打包

    编译后的文件增量打包

    指定文件复制


    概述

        由于大多的生产环境都采用的是增量发版,因此需要把把改变的代码打包,本文采用的是使用Java代码对

    SVN上的更新记录选择后进行打包

    准备

        到项目的SVN管理出找到历史更新记录,选择要打包的记录然后生成变更到本地即可,需要注意存放的位置

    源码增量打包

    package xxx.xxx.xxx.prdPacking;
    
    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.HashSet;
    import java.util.Set;
    import java.util.regex.Pattern;
    
    /**
     * 增量打包工具类,打包源代码</br>
     * 项目右键-->Team-->显示资源历史记录-->选中要更新的日志保存到changeLog文件
     * 
     */
    public class IncrementalPackagingSrc {
    	
    	// ----------------------无需改动
    	// 正则表达式
    	private static final String HEADSTR = "^\t[M|A] $";
    	// 分割线
    	private static final String DIVIDING_LINE = "----------------------------------------------------------------------------";
    	// 提交的文件说明list
    	private static Set<String> COMMIT_CONTEXT_LIST = new HashSet<>();
    	// 项目文件夹路径  
    	private static String PROJECTPATH = System.getProperty("user.dir").replace("\\", "/");
        
    	
    	// ----------------------根据需要进行改动配置
    	// 补丁文件,由eclipse svn plugin生成 
    	private static final String PATCHFILE="D:/changeLog.txt";  // 导出的日志地址
    	// 补丁文件包存放路径  
    	private static final String DESPATH="D:/update_pkg";   // 存放文件的地址
    	// 补丁版本 
    	private static final String VERSION="xxx/xxx/xxx"; // 更详细的地址,比如日期,版本,项目名
        
        private static int COUNT = 0 ;
        
        public static void main(String[] args) {
    		copyFiles(getPatchFileList());
    	}
    	/**
    	 * 得到patch里面更改过的文件
    	 * @return
    	 * @throws Exception
    	 */
        private static Set<String> getPatchFileList(){  
    		FileInputStream f = null;   
    		BufferedReader dr = null;  
    		Set<String> fileList = new HashSet<>();
    		try {
    			f = new FileInputStream(PATCHFILE);  
    			dr =new BufferedReader(new InputStreamReader(f,"utf-8"));
            	String line = "";  
            	String commit = "" ; 
            	while((line=dr.readLine())!=null){   
            		
            		// 保存提交时候说明内容
            		if (DIVIDING_LINE.equals(line)){
            			COMMIT_CONTEXT_LIST.add(commit);
            		}
            		commit = line;
            		// 匹配更新文件
            		if(line.length()>=3 && Pattern.matches(HEADSTR,line.substring(0, 3))){  
            			line = line.substring(line.indexOf("src/main"));
            			fileList.add(line);
            		}
            	}
    		} catch (Exception e) {
    			e.printStackTrace();
    			System.err.println("文件集合error");
    		}finally{
    			if (null != dr) {
    				try {
    					dr.close();
    				} catch (IOException e) {
    					e.printStackTrace();
    				}
    			}
    			if(null != f){
    				try {
    					f.close();
    				} catch (IOException e) {
    					e.printStackTrace();
    				}
    			}
    		}
    		
    		System.out.println("--------------------------待更新文件集合 start---文件个数:"+fileList.size());
    		for(String t:fileList){
    			System.out.println(t);
    		}
    		System.out.println("--------------------------待更新文件集合   end ---文件个数:"+fileList.size());
    		
    		System.out.println("***************************待更新文件备注   start *****");
    		for (String s : COMMIT_CONTEXT_LIST){
    			System.out.println(s);
    		}
    		System.out.println("***************************待更新文件备注   end *****");
    		return fileList;
        } 
    	
    	/**
    	 * copy 文件 ,有一部分文件含有匿名内部类,会生成ClassName$1.class类型的文件,需要用正则表达式获取文件
    	 * @param list
    	 */
        private static void copyFiles(Set<String> list){  
    		if(null == list || list.size() <=0 ){
    			return ;
    		}
    		System.out.println("开始copy源码文件-------------------------------------------------------------------------");
            for(String fullFileName:list){ 
            	
        		String fileName=fullFileName; 
        		
        		fullFileName = PROJECTPATH+"/"+fullFileName;//将要复制的文件全路径 
        		
        		String desFileNameStr=DESPATH+"/"+VERSION+"/"+fileName; 
        		
        		String tempDesPathStr=desFileNameStr.substring(0,desFileNameStr.lastIndexOf("/"));
        		
        		File desFilePath=new File(tempDesPathStr);  
        		if(!desFilePath.exists()){  
        			desFilePath.mkdirs();  
        		}
        		copyFile(fullFileName, desFileNameStr);
        		System.out.println("普通文件:"+fullFileName);  
        		COUNT ++ ;
            }  
            System.out.println("-------共增量打包源码文件数量:" + COUNT);  
        } 
    	
     	private static void copyFile(String sourceFileNameStr, String desFileNameStr) {  
            File srcFile=new File(sourceFileNameStr);  
            File desFile=new File(desFileNameStr);  
            if (srcFile.isDirectory() || desFile.isDirectory()) {
            	System.out.println("该路径是文件夹已经忽略打包:"+sourceFileNameStr);
            	return ;
            }
            try {  
                copyFile(srcFile, desFile);  
            } catch (IOException e) {  
                e.printStackTrace();  
            }  
        }  
    	
    	
     	private static void copyFile(File sourceFile, File targetFile) throws IOException {  
            BufferedInputStream inBuff = null;  
            BufferedOutputStream outBuff = null;  
            try {  
                // 新建文件输入流并对它进行缓冲  
                inBuff = new BufferedInputStream(new FileInputStream(sourceFile));  
      
                // 新建文件输出流并对它进行缓冲  
                outBuff = new BufferedOutputStream(new FileOutputStream(targetFile));  
      
                // 缓冲数组  
                byte[] b = new byte[1024 * 5];  
                int len;  
                while ((len = inBuff.read(b)) != -1) {  
                    outBuff.write(b, 0, len);  
                }  
                // 刷新此缓冲的输出流  
                outBuff.flush();  
            } finally {  
                // 关闭流  
                if (inBuff != null)  
                    inBuff.close();  
                if (outBuff != null)  
                    outBuff.close();  
            }  
        }  
    }
    

    编译后的文件增量打包

    
    package com.stream.util.prdPacking;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    import com.stream.app.common.StringUtil;
    import com.stream.util.DateUtil;
    
    public class IncrementalPackaging {
    
    	private final static String workSpace = "XXX"; // 工作空间
    	private final static String installDir = "xxx"; // 包目录
    
    	public static void main(String[] args) {
    	
            // 要打包编译文件的地址和文件名
    		incrementalPackaging("xxxxxxxxxxx");
    );
    
    	}
    
    	/**
    	 * 增量包打包
    	 * 
    	 * @param file1
    	 * @param file2
    	 */
    	public static void incrementalPackaging(String file) {
    		String file1 = workSpace + file;
    		String file2 = installDir + DateUtil.getCurrentStrDate("yyyyMMddHHmm") + "/FMC/WEB-INF/classes/" + file;
    		if (StringUtil.isNotNullOrEmpty(file1) && StringUtil.isNotNullOrEmpty(file2)) {
    			// 如果创建成功,在进行复制文件
    			if (createFile(file2)) {
    				copyFile(new File(file1), new File(file2));
    			}
    		}
    	}
    
    	/**
    	 * 复制文件
    	 * 
    	 * @param f1
    	 * @param f2
    	 */
    	public static String copyFile(File f1, File f2) {
    		try {
    			int length = 2097152;
    			FileInputStream in = new FileInputStream(f1);
    			FileOutputStream out = new FileOutputStream(f2);
    			byte[] buffer = new byte[length];
    			while (true) {
    				int ins = in.read(buffer);
    				if (ins == -1) {
    					in.close();
    					out.flush();
    					out.close();
    					return "操作成功!";
    				} else {
    					out.write(buffer, 0, ins);
    				}
    			}
    		} catch (FileNotFoundException e) {
    			e.printStackTrace();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    		return null;
    	}
    
    	/**
    	 * 创建文件
    	 * 
    	 * @param destFileName
    	 * @return
    	 */
    	public static boolean createFile(String destFileName) {
    		File file = new File(destFileName);
    
    		if (file.exists()) {
    			System.out.println("创建单个文件" + destFileName + "失败,目标文件已存在!");
    			return true;
    		}
    		if (destFileName.endsWith(File.separator)) {
    			System.out.println("创建单个文件" + destFileName + "失败,目标文件不能为目录!");
    			return false;
    		}
    
    		// 判断目标文件所在的目录是否存在
    		if (!file.getParentFile().exists()) {
    			// 如果目标文件所在的目录不存在,则创建父目录
    			System.out.println("目标文件所在目录不存在,准备创建它!");
    			if (!file.getParentFile().mkdirs()) {
    				System.out.println("创建目标文件所在目录失败!");
    				return false;
    			}
    		}
    
    		// 创建目标文件
    		try {
    			if (file.createNewFile()) {
    				System.out.println("创建单个文件" + destFileName + "成功!");
    				return true;
    			} else {
    				System.out.println("创建单个文件" + destFileName + "失败!");
    				return false;
    			}
    		} catch (IOException e) {
    			e.printStackTrace();
    			System.out.println("创建单个文件" + destFileName + "失败!" + e.getMessage());
    			return false;
    		}
    	}
    }
    

    指定文件复制

          用于修改后的文件复制到其它路径或项目里(本案例用于同一个项目不同的甲方个性化需求的开发方便源码复制发版)

    
    import java.awt.*;
    import java.io.*;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.logging.Logger;
    
    /**
     * 该类用于各个项目上的个性化需求更改后的文件复制(可跨项目复制)
     * 把修改后的文件地址放在下面,可以省去创建文件夹或复制文件的过程
     * 并在复制完成后自动打开文件位置,方便后续操作
     */
    public class ChangeFileCopy {
    
        // 目标项目名称(根据自己的支线项目名称更改)
        private final static String TARGETNAME = "ats_gf_branch";
    
        // 原文件详细地址(点击要复制的文件Copy Path然后放到下面,多个文件以','分割)
        private final static String SOURCEFILES = "D:\\IdeaProjects\\ats_gf\\fundats\\ats-core-db\\src\\main\\java\\com\\hundsun\\fund\\ats\\core\\warning\\dao\\impl\\WarningInfosDaoImpl.java" +
                ",D:\\IdeaProjects\\ats_gf\\fundats\\ats-modules-server\\src\\main\\java\\com\\hundsun\\fund\\ats\\modules\\server\\warning\\WarningBO.java";
    
    
        public static void main(String[] args) {
            CopyFiles(SOURCEFILES);
        }
    
    
        /**
         * @param string 文件地址字符串
         */
        public static void CopyFiles(String string) {
    
            // 日志记录
            Logger logger = Logger.getAnonymousLogger();
            int count = 0;
    
            // 文件信息打印
            ArrayList<String> list = new ArrayList<String>();
    
            // 循环得到文件项目名和路径
            String projectName = null;
            String targetFile = null;
            String result = null;
            String[] arrTarget = string.split(",");
            for (String dir :
                    arrTarget) {
                String[] split = dir.split("\\\\");
    
                for (int i = 0; i < split.length; i++) {
                    if ("fundats".equals(split[i])) {
                        projectName = split[i - 1];
                    }
                }
    
                targetFile = dir.replace(projectName, TARGETNAME);
    
                try {
                    // 创建文件目录
                    CreateFile(targetFile);
                } catch (Exception e) {
                    int lastIndexOf = targetFile.lastIndexOf("\\");
                    String substring = targetFile.substring(0, lastIndexOf);
                    String dirString = substring.replace("\\", "\\\\");
    
                    logger.warning("创建目录失败{" + dirString + "}");
                    continue;
                }
    
                try {
                    // 复制文件
                    result = CopyFile(dir, dir.replace(projectName, TARGETNAME));
                    list.add(result);
                } catch (Exception e) {
                    count++;
                    logger.warning("复制文件失败{" + result + "}");
                    continue;
                }
            }
    
            System.out.println("\n" + Arrays.toString(list.toArray()) + "\n文件复制结束,成功数量为:" + (arrTarget.length - count));
        }
    
        /**
         * 创建文件夹目录
         *
         * @param targetFile 目标文件地址
         */
        public static void CreateFile(String targetFile) {
    
            int lastIndexOf = targetFile.lastIndexOf("\\");
            String substring = targetFile.substring(0, lastIndexOf);
            String dirString = substring.replace("\\", "\\\\");
    
            // 创建文件夹
            try {
                File file = new File(dirString);
                file.mkdirs();
            } catch (Exception e) {
                System.out.println("创建目录失败 --- " + dirString);
            }
        }
    
    
        /**
         * 文件复制
         *
         * @param sourceFile 原文件地址
         * @param targetFile 目标件地址
         */
        public static String CopyFile(String sourceFile, String targetFile) {
    
            FileInputStream input = null;
            FileOutputStream output = null;
            BufferedInputStream inBuff = null;
            BufferedOutputStream outBuff = null;
    
            File inFile = new File(sourceFile);
            File outFile = new File(targetFile);
            // 新建文件输入流并对它进行缓冲
            try {
                input = new FileInputStream(inFile);
                inBuff = new BufferedInputStream(input);
    
                // 新建文件输出流并对它进行缓冲
                output = new FileOutputStream(outFile);
                outBuff = new BufferedOutputStream(output);
    
                // 缓冲数组
                byte[] b = new byte[1024];
                int len;
                while ((len = inBuff.read(b)) != -1) {
                    outBuff.write(b, 0, len);
                }
                // 刷新此缓冲的输出流
                outBuff.flush();
    
                // 文件复制成功后并打开文件位置,方便查看和操作
                openDirAndSelectFile(targetFile);
    
            } catch (IOException e) {
                System.out.println("文件复制出错:" + e.getMessage());
            }
    
            //关闭流
            try {
                inBuff.close();
                outBuff.close();
                output.close();
                input.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
    
            return inFile.getName();
        }
    
        /**
         * 打开文件
         *
         * @param targetFile 目标文件地址
         */
        public static void openFile(String targetFile) {
            File file = new File(targetFile);
            try {
                Desktop.getDesktop().open(file);
            } catch (IOException e) {
                System.out.println(e.getMessage());
            }
        }
    
        /**
         * 打开文件目录并选定文件
         *
         * @param targetFile 目标文件地址
         */
        public static void openDirAndSelectFile(String targetFile) {
            try {
                Runtime.getRuntime().exec("explorer /select, " + targetFile);
            } catch (IOException e) {
                System.out.println(e.getMessage());
            }
        }
    
    }
    

     

    展开全文
  • java打包安装工具教程

    2012-01-04 12:36:34
    java项目开发完以后,在交付给客户前需要打包
  • 以往我们打包部署程序,如果新增加了jar包要去shell脚本里新增加jar包引用,有时候还容易改错。 而基于maven方式的打包打包后lib文件全在一个jar包里 这样导致这个jar包是比较大的,几十兆或上百兆,如果主程序...

    下载地址:更新日期:2017年12月7日09:03:17

    链接:https://pan.baidu.com/s/1eRA8fD4 密码:6sao


    使用介绍:

    以往我们打包部署程序,如果新增加了jar包要去shell脚本里新增加jar包引用,有时候还容易改错。

    而基于maven方式的打包,打包后lib文件全在一个jar包里 这样导致这个jar包是比较大的,几十兆或上百兆,如果主程序jar包 有改动,重新编译后,则要把这么大的jar包完整的去替换掉,不利于更新。

    也找过一些 通用的java项目启动脚本,并不理想,有的甚至不能再正常使用。


    这是我常用的一个目录结构,项目是框架用的spring boot开发,未编译前项目的结构大致如下:


    lib用于存放所有的 jar包,包括主程序代码编译成class的jar包。

    static 存放所有的  web资源

    template 存放 html页面

    一些可能需要修改的配置放在根目录,如:application.properties


    使用说明:

    建议配合 idea开发工具进行使用更为方便。此工具的目的主要是自动生成bat和sh 启动脚本。

    软件原理:

    获取软件当前目录下的lib文件夹里的所有jar包名称 根据bat 和 sh 脚本的相关语法进行字符串拼接。

    使用流程:

    1·打开idea 项目


    点击右上角的Project Structure --》Project Settings-->Artifacts 进入到如下界面

    配置好的界面:


    下面教大家一步步去配置:



    选择要打包的模块  Module

    然后选择 该模块的入口Main方法  点击ok 出现如下界面


    点击 Create Director 黄色的创建文件夹按钮,名称为lib ,并把当前所有的jar包引用 放入到lib文件夹里(小技巧:点击点击个jar包按住Shift 然后点到最后一个 jar包 全部选中 再按住 ctrl 键 把所有jar包一下全拖到 lib目录)

    然后设置一下 你的主程序类的启动参数 如-Dserver.port=8701 com..EurekaBlackClientApplication

    把该配置信息写入到 congfig.txt ,我一般把congfig.txt放入到项目里的META-INF 文件夹下

    在上图界面点击绿色+号--》file 把自己的config.txt  和 我们的生产工具引入进来,效果如下图


    然后点击ok

    在 idea 菜单里点击如下图


    build 以后,项目会生成在 out/artifacts 目录,

    运行 shell脚本生成工具如下图


    根据自己的需要 生成 相应的脚本

    根据自己的需要 是否把 主程序jar包的配置文件 放入到根目录。

    以上过程 虽然少显繁琐,但是一个项目只需要配置一次,以后该项目再重新build 打包,就不再需要以上过程了。

    教程大概就是这样。有疑问和建议请在本文章留言,工具会持续更新。

    展开全文
  • Java项目打包成exe的详细教程

    千次阅读 2021-02-12 09:30:50
    Java项目打包成exe的详细教程把Java项目打包成exe共分为以下两步:1、 利用Eclipse先把Java项目先打成jar包2、 利用exe4j工具把jar包转成exe这里以Java项目(ExeDemo)为例进行讲解随便在一个位置新建一个文件夹,...

    Java项目打包成exe的详细教程

    把Java项目打包成exe共分为以下两步:

    1、 利用Eclipse先把Java项目先打成jar包

    2、 利用exe4j工具把jar包转成exe

    这里以Java项目(ExeDemo)为例进行讲解

    随便在一个位置新建一个文件夹,文件夹的名称也可以随便起,这里我们在桌面上新建一个文件ExeDemo

    a2212304dd79330691454a7c67eef6b0.png

    1、利用Eclipse先把Java项目先打成jar包

    (1)找到要转成exe的Java项目

    05c2957a9b62fe3d0b212e868936bf0c.png

    (2)Export相应的Java项目

    98afd0419a428abbd8edf084ba2d430b.png

    (3)选择Java->JAR file

    45ae7a69b9ecc18bc17f140fdf16b9f0.png

    (4)按照如下设置,然后点击Finish结束

    bb64616490719f593f3e63fcad826930.png

    (5)即可生成相应的jar包(ExeDemo.jar文件)

    a05aa222858bf68f82dd8c94e7c0f01b.png

    2、利用exe4j工具把jar包转成exe

    (1)把Java项目中引用的jar包lib目录拷贝到ExeDemo目录中

    7a814e59c92b240eeb02f74542e1b9f7.png

    72535332f36fe2a53a929dc07d9cdbc0.png

    (2)把自己电脑上装的jre环境也拷贝到ExeDemo目录中

    6dd7b6683750a638f179d87916456511.png

    (3)在ExeDemo目录中可以新建一个image(名字可以自己随便起)目录,存放JFrame要引用的图标

    至于程序中的路径可以参考以下代码:

    mainJFrame.setIconImage(newImageIcon(System.getProperty("user.dir")+"\\image\\logo.jpg").getImage());

    a3a63928bf61956c0b8d7f64a9c4499b.png

    (4)安装exe4j工具(自己上网下载,我用的是exe4j 5.0)

    0ef0d3754fbae3d4203aa365d28b8181.png

    (5)打开exe4j工具,点击Next

    299e85861117041ea4f200fda54625c3.png

    (6)选择JAR in EXE mode

    e0b31f225652a09b24b5d79b9ccd1e01.png

    (7)输入exe程序短名称和exe程序输出位置

    23842d12cde53fcbcd6a9f516e259174.png

    (8)输入应用程序名称,如果想为程序添加图标ico,可以在这一步的红色方框位置选择图标ico的位置。

    39a7e699bc636fb43423ab0028350287.png

    (9)这一步是选择产生一个64位的可执行程序exe

    f71b294b872860cc6498819723699920.png

    (10)这一步是选择要添加的jar包,把Java项目打包成的JAR包【ExeDemo.jar】和Java项目中外部依赖的JAR包【也就是lib文件夹中的JAR包】都添加进来和根据Java项目实际情况选择主类(cn.demo.UIMain)。主类就是你的程序运行的入口。

    1299b6ddf1f3862e8b13da24ab34f7c0.png

    762773a09556e8b57efc0ce1ffb565e0.png

    538d8f8c1a0090b8bab36c838f6ce0c7.png

    如果是JAVA项目工程是UTF-8,为了防止JAVA项目中的读写中文字符串有乱码产生,可以在这里红框位置添加参数(-Dfile.encoding=utf-8)

    如果打包出来出现乱码情况则:打包的时候设置编码:exe4j的Configurejava invocation 的VMParameters

    输入:-Dfile.encoding=utf-8 来防止打包后的exe出现乱码

    5acb6eaebd10de6c3f0f14e9dad41ea0.png

    (11)填写JRE最小版本需求

    225589c8aa2b67c43e8f95ce955bc1db.png

    (12)添加并选择JRE Search sequence,也就是JRE环境搜索顺序。

    7ade4d7d6c574ad5844dcb1ba888c5d7.png

    6ad839484095a65daaf937417f5fb0dd.png

    10941796b3414cd8f1cbcb09ede1fe48.png

    d2a4b2af68bd4675069225e04b7e7d30.png

    8f9bd1b5492de21d189c5215ba5b2fd0.png

    3e6678792e4b60e3c422b396b4d11d51.png

    并利用右下角的蓝色小箭头将项目中的jre放在最上面,让exe搜索JRE的时候优先选择ExeDemo文件夹中包含的JRE

    631a2d9a7a3b2b7958ee69ed573ada54.png

    2c2c829d1b892587fe2d81d3415e2904.png

    (13)选择Next

    57bd1750090426987b837457f0e233ea.png

    4712c98480434505a0900d454212ba92.png

    (14)选择Next

    e55a344fb70e858f183aef4aa92bb0fa.png

    3be1aaed2b0bd38aef8ec1a56f22cc13.png

    831ca19b082c77217a37d5edff3a9b5d.png

    (15)最后即可生成ExeDemo.exe可执行程序

    9203ebb349bd68d59102fa39600c874f.png

    (16)双击即可运行程序。

    文章来源:https://blog.csdn.net/youngstar70/article/details/75116227。文章写的实在太详细了,非常感谢博主的分享

    展开全文
  • HTMLifier会将您的Scratch项目打包为一个HTML文件,该文件可以在网络浏览器中单独运行。 HTML文件将很大,因为它包含整个Scratch引擎(2.6 MB)以及项目中使用的服装和声音文件。
  • exe4j工具打包java Swing编写的软件

    千次阅读 2017-05-10 21:35:26
    但并不是每个客户的电脑都安装我们java程序员熟悉的JDK,因此如何让java编写的Swing软件运行在客户的PC端?对于打包exe可执行程序的步骤如下: 第一步:下载exe4j工具,链接地址:点击打开链接 第二步:打开exe4j...
  • 开发手机自动划屏,点赞必备工具,开发一些手机游戏辅助工具,好玩有趣,有Java开发基础更好,简单上手快,而且内部有很多例子
  • java+Swing打包成exe可安装文件

    热门讨论 2012-10-10 09:51:45
    使用exe4j与inno setup 将java程序打包成可直接安装的exe程序,打包时可将jre一同封装,这样就可以在没有jdk环境的机器上运行
  • java打包必备软件exe4j

    2016-03-14 11:21:27
    java打包必备工具,简单好用还免费,绝对值得拥有,这个是绝对能用的通用版

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 80,312
精华内容 32,124
关键字:

java软件打包工具

java 订阅