美文网首页
2021-11-26 IDEA打包main函数代码成jar运行

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

作者: 颈椎以上瘫痪 | 来源:发表于2021-11-26 11:07 被阅读0次

    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类型就是要带引号。

    相关文章

      网友评论

          本文标题:2021-11-26 IDEA打包main函数代码成jar运行

          本文链接:https://www.haomeiwen.com/subject/fdvtxrtx.html