【SpringBoot/CLI】如何創建一個SpringBoot控制台程序


【名詞解釋】

CLI:Command Line Interface  命令行界面 典型如Linux控制台

GUI:Graphical User Interface 圖形界面 典型如BS/CS程序

【工具】

Idea和一台能聯網的電腦

【主要步驟】

1.用Idea創建一個Maven項目。

2.在pom里加入以下依賴

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <version>2.6.4</version>
        </dependency>

注意2.6.4不是必須的,您可以根據自己m2目錄中的spring-boot-starter版本來定。當然能聯網就省卻很多沒必要的煩惱了。

3.制作一個啟動類如下:

package com.hy;

import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class MyApplication implements CommandLineRunner {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }

    @Override
    public void run(String... args) throws Exception {
        System.out.println("Hello cli");
    }
}

這個類一要加入SpringBootApplication注解,二要實現CommandLineRunner接口。

4.此時就可以啟動項目了,讓我們先看看效果:

C:\Java17\bin\java.exe "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2021.3.2\lib\idea_rt.jar=55819:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2021.3.2\bin" -Dfile.encoding=UTF-8 -classpath C:\Users\ufo\IdeaProjects\SpringbootCli\target\classes;C:\Users\ufo\.m2\repository\org\springframework\boot\spring-boot-starter\2.6.4\spring-boot-starter-2.6.4.jar;C:\Users\ufo\.m2\repository\org\springframework\boot\spring-boot\2.6.4\spring-boot-2.6.4.jar;C:\Users\ufo\.m2\repository\org\springframework\spring-context\5.3.16\spring-context-5.3.16.jar;C:\Users\ufo\.m2\repository\org\springframework\spring-aop\5.3.16\spring-aop-5.3.16.jar;C:\Users\ufo\.m2\repository\org\springframework\spring-beans\5.3.16\spring-beans-5.3.16.jar;C:\Users\ufo\.m2\repository\org\springframework\spring-expression\5.3.16\spring-expression-5.3.16.jar;C:\Users\ufo\.m2\repository\org\springframework\boot\spring-boot-autoconfigure\2.6.4\spring-boot-autoconfigure-2.6.4.jar;C:\Users\ufo\.m2\repository\org\springframework\boot\spring-boot-starter-logging\2.6.4\spring-boot-starter-logging-2.6.4.jar;C:\Users\ufo\.m2\repository\ch\qos\logback\logback-classic\1.2.10\logback-classic-1.2.10.jar;C:\Users\ufo\.m2\repository\ch\qos\logback\logback-core\1.2.10\logback-core-1.2.10.jar;C:\Users\ufo\.m2\repository\org\slf4j\slf4j-api\1.7.32\slf4j-api-1.7.32.jar;C:\Users\ufo\.m2\repository\org\apache\logging\log4j\log4j-to-slf4j\2.17.1\log4j-to-slf4j-2.17.1.jar;C:\Users\ufo\.m2\repository\org\apache\logging\log4j\log4j-api\2.17.1\log4j-api-2.17.1.jar;C:\Users\ufo\.m2\repository\org\slf4j\jul-to-slf4j\1.7.36\jul-to-slf4j-1.7.36.jar;C:\Users\ufo\.m2\repository\jakarta\annotation\jakarta.annotation-api\1.3.5\jakarta.annotation-api-1.3.5.jar;C:\Users\ufo\.m2\repository\org\springframework\spring-core\5.3.16\spring-core-5.3.16.jar;C:\Users\ufo\.m2\repository\org\springframework\spring-jcl\5.3.16\spring-jcl-5.3.16.jar;C:\Users\ufo\.m2\repository\org\yaml\snakeyaml\1.29\snakeyaml-1.29.jar com.hy.MyApplication

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v2.6.4)

2022-03-01 20:20:13.578  INFO 9952 --- [           main] com.hy.MyApplication                     : Starting MyApplication using Java 17.0.2 on DESKTOP-OOO5MRB with PID 9952 (C:\Users\ufo\IdeaProjects\SpringbootCli\target\classes started by ufo in C:\Users\ufo\IdeaProjects\SpringbootCli)
2022-03-01 20:20:13.582  INFO 9952 --- [           main] com.hy.MyApplication                     : No active profile set, falling back to 1 default profile: "default"
2022-03-01 20:20:14.362  INFO 9952 --- [           main] com.hy.MyApplication                     : Started MyApplication in 1.57 seconds (JVM running for 2.306)
Hello cli

Process finished with exit code 0

很不錯,確如預期。

5.制作執行包。

程序出來后,我們不可能讓客戶帶着Idea里運行,像這種cli程序一般是給他打個jar包,然后用java -jar的方式運行。

打包很簡單,只要把下面代碼放到pom里:

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

刷新maven后,打開maven窗口,先執行clean再執行package,在項目的target目錄里就會出現一個jar包,我的是SpringbootCli-1.0-SNAPSHOT

之后把這個jar拿出來,放到任意目錄下,打開cmd窗口,輸入java -jar SpringbootCli-1.0-SNAPSHOT.jar就執行起來了。

C:\hy>java -jar SpringbootCli-1.0-SNAPSHOT.jar

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v2.6.4)

2022-03-01 20:12:34.097  INFO 7628 --- [           main] com.hy.MyApplication                     : Starting MyApplication using Java 17.0.2 on DESKTOP-OOO5MRB with PID 7628 (C:\hy\SpringbootCli-1.0-SNAPSHOT.jar started by ufo in C:\hy)
2022-03-01 20:12:34.103  INFO 7628 --- [           main] com.hy.MyApplication                     : No active profile set, falling back to 1 default profile: "default"
2022-03-01 20:12:34.858  INFO 7628 --- [           main] com.hy.MyApplication                     : Started MyApplication in 1.294 seconds (JVM running for 1.803)
Hello cli

C:\hy>

 

【完整POM.XML】

<?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.example</groupId>
    <artifactId>SpringbootCli</artifactId>
    <version>1.0-SNAPSHOT</version>

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

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <version>2.6.4</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

 

最后把完整的工程鏈接分享給大家

【完整工程鏈接】

 https://files.cnblogs.com/files/heyang78/SpringbootCli220301.zip?t=1646137849

END

 

PS:特別提醒

如果非公網,您可能需要指定spring-boot-maven-plugin的版本,如下

<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
<version>2.2.13.RELEASE</version>
<executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins> </build>

以上藍色粗體字部分是我在單位機器上必須添加的內容,至於版本是從我的m2倉庫里找到的最高版本,而本地倉庫是連的單位maven私服。

沒有使用這句之前,打包時總是報1.5.9.RELAEASE出錯,然后執行報沒有主清單屬性。

加上這句后打包執行就都好了。

2022年3月2日10點03分


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM