iT邦幫忙

2025 iThome 鐵人賽

DAY 4
0
Software Development

我們與Maven的距離系列 第 4

Day03 - Simple Java Jar App

  • 分享至 

  • xImage
  •  

前言

前一日我們用徒手將攻城獅的日常生活走完一遭,師傅告訴我是不是可以加個log加個Junit測試呢,於是我們又開始辛苦的一天

需求

做個專業的攻城師專案可能沒有Junit進行測試,但一定少不了log,為求更進一步我們在原先的專案中加入log與Junit測試來看看吧

開發

survey - logback

我們先到logback官網看一下導入log的起手勢吧,我們按照步驟下面連結下載對應Jar

  • logback-core-1.5.18.jar
  • logback-classic-1.5.18.jar
  • slf4j-api-2.0.16.jar

survey - Junit

我們採用Junit4,我們來看一下官網告訴我們需要那些吧

  • junit.jar
  • hamcrest-core.jar

專案目錄規劃

有了前天編譯的class檔與打包完的Jar放在同一個資料顯得雜亂樣態,更何況那些資料是不需要進版控的,所以我們將src資料夾放置我們的source code,target放置我們的編譯與打包檔案,lib放置我們相依的套件,conf放置logback設定檔

MyProject
+---conf
|       logback.xml
|
+---lib
|       junit-4.13.2.jar
|       logback-classic-1.5.18.jar
|       logback-core-1.5.18.jar
|       slf4j-api-2.0.17.jar
|
+---src
|       Main.java
|       MainTest.java
|
\---target

程式開發

Main.java

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Main {
    // 建立 Logger 實例
    private static final Logger logger = LoggerFactory.getLogger(Main.class);

    public static void main(String[] args) {
        logger.info("Application running...");
        System.out.println(runApplication());
        logger.info("Application finished.");
    }
    public static String runApplication() {
        return "Hello World!";
    }

}

MainTest.java

import org.junit.Test;
import static org.junit.Assert.assertEquals;


public class MainTest {
    @Test
    public void testRunApplication() {
        assertEquals("Hello World!", Main.runApplication());
    }
}

測試

編譯

javac src\*.java -s src -d target -cp "lib\junit-4.13.2.jar;lib\slf4j-api-2.0.17.jar"

測試

java -cp "target\;lib\*" org.junit.runner.JUnitCore MainTest

https://ithelp.ithome.com.tw/upload/images/20250918/20128084rc1U0WO0ft.png

打包

jar cfe target\MyApp.jar Main -C target .

https://ithelp.ithome.com.tw/upload/images/20250918/20128084rhf9vQhuRR.png
執行發現到事情沒有我們想的那麼簡單,因為jar根本不能下cp參數
https://ithelp.ithome.com.tw/upload/images/20250918/20128084sB1jfCQfjn.png
注意這邊我們無法以java -jar的方式運行,因為jar本身無法直接讀取外部依會發生Exception
https://ithelp.ithome.com.tw/upload/images/20250918/201280842s82SQv8Ic.png
此時我們只能使用將我們的jar加到classpath中讓他去找Main執行

java -cp "target\MyApp.jar;lib\*" Main

https://ithelp.ithome.com.tw/upload/images/20250918/20128084mpzyuuwQPw.png

部署

部署我們以這個jar可以執行帶過,畢竟只是放到我們部署的資料夾MyApp中,修改一下bat檔

@echo off
java "H:\MyApp\MyApp.jar" -cp ".lib\*" Main
pause

https://ithelp.ithome.com.tw/upload/images/20250918/20128084sYwJ9lcJ8X.png

小結

難道我不能以java -jar執行?我的測試代碼被我不小心打包了,天啊!!做攻城獅好辛苦...

reference


上一篇
Day02 - Super Simple Java Jar Application
下一篇
Day04 - Java Web Project and IDEs
系列文
我們與Maven的距離8
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言