2021-11-26 IDEA打包main函数代码成jar运行

IDEA打包jar

在IDEA中写了main函数,并且在IDE中可以运行,这种时候如果需要将这个代码打包去执行某些业务,就需要打包这个main函数的内容,而不是整个项目。

在本文中笔者特意使用到了三方库Gson,为了说明最终打包时会自动引入你的程序运行依赖的文件,不用担心你依赖的文件最终会缺失的问题。

package org.venus;

import com.google.gson.Gson;

/**
 * Author      Jxx          _让世界看到我
 * On          2021/11/26
 * Note        TODO
 */
public class Run {

    public static void main(String[] args) {
        System.out.println("程序启动");

        System.out.println("参数信息:"+new Gson().toJson(args));

        for (String arg : args) {
            System.out.println("参数:"+arg);
        }

        System.out.println("执行结束");
    }
}

1.这段代码再IDEA中执行大家一眼能看出来,参数args里面是没有内容的。首先在IEDA中执行这个函数,确保是能正确执行。

2021-11-26_102311.png

2.选择左上角的file->project structure

2021-11-26_102603.png

3.选择artifacts->加号(+)->JAR->from modules with dependencies

2021-11-26_102954.png

4.Module选择你要打包运行的main函数是在当前项目中的哪一个module,Main Class选择你要打包的main所在的类,选择extract to the target JAR,选择manifest文件的存储路径,一般就在打包模块的里面。

2021-11-26_1033471.png

5.确认后project structure面板中多了一个打包选项,其中name就是打包后jar文件的名称,output directory是jar文件的路径,点击OK返回编辑界面。

2021-11-26_103526.png

6.导航栏中选择build->build artifacts

2021-11-26_103718.png

7.选择上文中创建的打包模块名称->选择build,IDEA会进入构建过程,构建完成打开上文中提到的打包jar文件存储路径的文件夹,可以看到里面有一个打包的jar文件。

2021-11-26_104414.png

在窗口中运行jar

上文记录了java程序打包成jar文件,这里记录一下运行jar文件,在Windows中不能直接运行jar文件,所以使用命令行运行,和添加参数。

在命令行中运行jar文件的命令是:

java -jar xxx.jar
2021-11-26_104737.png

上图中执行打包的jar和打包之前再IDEA中运行结果是一样的,也就说明我们打包成功并且运行也成功。

下面修改这个程序,添加几个参数。拟定我们需要2个参数,一个IP和一个端口。

package org.venus;

import com.google.gson.Gson;

/**
 * Author      Jxx          _让世界看到我
 * On          2021/11/26
 * Note        TODO
 */
public class Run {

    public static void main(String[] args) {
        System.out.println("程序启动");

        System.out.println("参数信息:"+new Gson().toJson(args));

        for (String arg : args) {
            System.out.println("参数:"+arg);
        }

        if (args.length<2){
            System.out.println("请给我2个参数,地址和端口!");
            return;
        }

        String ip = args[0];
        String portS = args[1];
        int port = -1;
        try {
            port= Integer.parseInt(portS);
        } catch ( Exception e){
            System.out.println("端口号格式错误,请参照[80-65535]!");
            return;
        }

        if (port<0){
            System.out.println("请给我正确的端口号!");
            return;
        }

        System.out.println("你给的地址是:"+ip+",端口是:"+port+",我现在就去工作!");

        for (int i = 0; i < 5; i++) {
            try {
                System.out.println("工作中...");
                Thread.sleep(1000*5);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        System.out.println("工作完成!");
        System.out.println("执行结束");
    }
}

改了过后在IDEA中运行main函数,程序会停在22行,因为没有参数。现在将程序继续打包,运行jar文件。

2021-11-26_105553.png
2021-11-26_105525.png

和在IDEA中一样提示没有参数。

现在在执行命令后面加上2个参数运行:

java -jar MavenJar.jar 12 34
2021-11-26_110041.png

可以看到日志地址是12,端口是34。也就是说在执行命令后面使用空格隔开,可以添加参数,多个参数之间也使用空格隔开。

那么我们再修改命令,在12中间加个空格:

java -jar MavenJar.jar 1 2 34
2021-11-26_110209.png

看到日志地址是1,端口是2,可以说明后面接的参数多一个空格,就认为后面的是另一个参数,那么如果我的参数中确实有那个空格呢?可以将参数使用双引号包起来,双引号内的空格不会拆分。

java -jar MavenJar.jar "1 2" 34
2021-11-26_110508.png

看到日志地址是1 2,使用引号可以解决传带空格参数问题,所以建议后面写参数都使用引号,即使你传的是一个数值型的,因为在代码中这些参数都是以String类型传进去的,与Java语法也是匹配的,String类型就是要带引号。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值