吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3829|回复: 22
收起左侧

[Java 转载] 【教程】如何将JAVA代码转成可执行的exe文件直接发布给其它人使用

 关闭 [复制链接]
haodadeyu 发表于 2022-9-2 10:36

前置准备

1、电脑需要安装并配置JAVA开发环境
2、电脑需要下载安装JAR包转EXE工具
3、需要了解最基础的JAVA开发知识和,MAVEN项目构建知识

一、创建一个MAVEN工程

本次示范的DEMO功能要实现的功能非常简单,将一个文件夹下的文件的内容挨个复制,合并到一个文本中。
全部代码如下:

import org.fusesource.jansi.Ansi;
import org.fusesource.jansi.AnsiConsole;

import java.io.*;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) throws InterruptedException {
        while (true) {
            try {
                String inputFolder;
                Scanner sc = new Scanner(System.in);
                if (args.length >= 1) {
                    inputFolder = args[0];
                } else {
                    print("请输入需要合并的文本所在文件夹的目录(如 C:\\Users\\admin\\Desktop\\log)", Ansi.Color.CYAN);
                    inputFolder = sc.next();
                }
                File folder;
                while (true) {
                    folder = new File(inputFolder);
                    if (!folder.exists() || !folder.isDirectory()) {
                        print("输入的不是一个文件夹路径或该文件夹不存在,请重新输入", Ansi.Color.RED);
                        inputFolder = sc.next();
                    } else {
                        break;
                    }
                }
                File output = new File(folder.getParent() + File.separator + "output.txt");
                if (!output.exists()) {
                    output.createNewFile();
                }
                BufferedWriter bw = new BufferedWriter(new FileWriter(output));
                File[] fs = folder.listFiles();
                for (int i = 0; i < fs.length; i++) {
                    BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(fs[i]), "UTF-8"));
                    String line;
                    while ((line = br.readLine()) != null) {
                        bw.write(line);
                        bw.newLine();
                    }
                    br.close();
                }
                bw.close();
                print("合并完毕,合并的文本所在目录:" + output.getAbsolutePath(), Ansi.Color.GREEN);
            } catch (IOException o) {
                print("发生io异常,已终止程序", Ansi.Color.RED);
                o.printStackTrace();
                Thread.sleep(10000);
                return;
            }
        }
    }

    public static Ansi formatStr(String content, Ansi.Color colour) {
        return Ansi.ansi().fg(colour).a(content);
    }

    public static void print(String content, Ansi.Color colour) {
        AnsiConsole.systemInstall();
        System.out.println(formatStr(content, colour));
        AnsiConsole.systemUninstall();
    }

}

二、MAVEN打包配置

DEMO中引入了第三方的jar包,我们等下转成exe需要我们的jar包是带了完整库的,否则在别的环境运行会因为没有库报错,所以maven需要配置把第三方jar包一块打进去。
POM文件如下

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.52pojie</groupId>
    <artifactId>merge</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.fusesource.jansi</groupId>
            <artifactId>jansi</artifactId>
            <version>2.1.1</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.0.2</version>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <mainClass>Main</mainClass> <!-- 此处为主入口main的路径-->
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                    <archive>
                        <manifest>
                            <!--自己的主类路径-->
                            <mainClass>Main</mainClass>
                        </manifest>
                    </archive>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>8</source>
                    <target>8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

免费评分

参与人数 2吾爱币 +6 热心值 +2 收起 理由
ABuSiDeLuoYin + 1 + 1 谢谢@Thanks!我特喵直接给个免费的评分
苏紫方璇 + 5 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| haodadeyu 发表于 2022-9-2 11:47
本帖最后由 haodadeyu 于 2022-9-2 15:32 编辑

四、将jar包转成exe

需要预先安装转换工具exe4j,可直接到官网https://exe4j.apponic.com下载,安装过程和破解过程请自行搜索,网上有很多licence。

安装完毕后打开工具 除了下列截图内容外其它都可以默认设置。

1、设置输出路径

1

1

2、这里可以选择转换生成的exe的图标

2

2

3、生成64位兼容的exe程序,否则程序在64位机器上运行可能会闪退

3

3

4、设置源程序jar包,导入上一步中生成的完整jar包,勾选对应的主函数入口

4

4

5

5

6

6

5、设置jre和exe相对路径,在其它机器上会读取该文件夹作为jre源

jre配置.png

8

8

6、生成可执行的exe

2.png

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
ZMZN + 1 + 1 长见识了,非常感谢

查看全部评分

 楼主| haodadeyu 发表于 2022-9-2 10:48

三、检验JAR包完整性

编译、打包,在对应的输出目录下会出现两个jar包,一个包含完整的第三方依赖包库,一个不包含,后者只能在本地环境运行。
5.png
直接控制台启动jar包
4.png
校验下对应的功能正常不正常,如果缺失了依赖包会提示没有找到对应的类。

hrpzcf 发表于 2022-9-2 12:47
打包后的文件这么小挺意外的,真的可以在没有Java环境的系统里运行吗?
jerry828 发表于 2022-9-2 13:59
感谢分享,学习了
Vvvvvoid 发表于 2022-9-2 13:17
hrpzcf 发表于 2022-9-2 12:47
打包后的文件这么小挺意外的,真的可以在没有Java环境的系统里运行吗?

集成 jre 的话 体积会大很多,
也可以不集成, 运行的时候依赖系统的 jre
 楼主| haodadeyu 发表于 2022-9-2 15:28
hrpzcf 发表于 2022-9-2 12:47
打包后的文件这么小挺意外的,真的可以在没有Java环境的系统里运行吗?

不好意思,写得不是特别严谨,已经订正,意思是修改exe读取的jre路径,目前好像没发现可以直接一个exe包含jre的方法。
海是倒过来的天 发表于 2022-9-2 15:46
如果不包含jre叫普通人安装也没什么意义,
萋小磊 发表于 2022-9-2 15:49
这都是妥协的方案, 可以试试 Graalvm Native Build 支持 Linux Mac Win
案例 https://github.com/zhengchalei/vertx-kotlin-graal
l1laoba888 发表于 2022-9-2 16:43
收藏了,以后学java再用
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 02:42

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表