Java ํ๋ก๊ทธ๋จ ๋ฐฐํฌํ๊ธฐ
3.
๋น๋ ์ค์ - pom.xml
4.
JAR ํ์ผ ์์ฑ - mvn clean package
a.
์ฑ์ด๋ฆ-0.0.1-jar-with-dependencies.jar
5.
App.jar ๋ก ์ด๋ฆ ๋ณ๊ฒฝ
6.
JAR ์คํ ํ
์คํธ (run.bat)
7.
Installer์ ํฌํจํ ํ์ผ ์ค๋น
a.
App.jar
b.
lib
c.
icon.ico
8.
Installer ํ์ผ ์์ฑ (install.bat)
jpackage
์๋ฐ ๋ฐฐํฌ์ฉ ํจํค์ง ์์ฑ ํ๋ก๊ทธ๋จ
โข
Java ๋ฐํ์(JRE)์ ํฌํจํ์ฌ ๋
๋ฆฝ ์คํํ ์ ํ๋ฆฌ์ผ์ด์
์์ฑ ๊ฐ๋ฅ
โข
.msi ๋๋ .exe ์ค์น ํ์ผ ๋ฑ์ผ๋ก ๋ฐฐํฌ ๊ฐ๋ฅ
โข
์์ด์ฝ, ์ด๋ฆ, ๋ฒ์ , ๋ผ์ด์ ์ค ๋ฑ๋ ์ง์ ๊ฐ๋ฅ
โข
JavaFX ์ฑ ๋ฐฐํฌ ์ ํนํ ์ ์ฉ
๊ธฐ๋ณธ ์์
jpackage ^
--type exe ^
--name MyApp ^
--input . ^
--main-jar App.jar ^
--main-class com.aloha.Main ^
--icon icon.ico ^
--win-dir-chooser ^
--win-menu ^
--win-shortcut
Bash
๋ณต์ฌ
์ฃผ์ ์ต์
์ต์
| ์ค๋ช
|
--type <ํ์> | ํจํค์ง ํ์์ ์ง์ . ์: app-image (์ฑ ์ด๋ฏธ์ง), exe (์๋์ฐ ์คํ ํ์ผ) |
--name <name> | ์คํํ์ผ ๋๋ ์ฑ ์ด๋ฏธ์ง์ ์ด๋ฆ์ ์ง์ |
--input <jar ํ์ผ ๊ฒฝ๋ก> | jar ํ์ผ์ ์์น๋ฅผ ์ง์ . ์๋ ๊ฒฝ๋ก ๋๋ ์ ๋ ๊ฒฝ๋ก ๊ฐ๋ฅ |
--main-jar <jar ํ์ผ๋ช
> | Main ํด๋์ค๋ฅผ ๊ฐ์ง๊ณ ์๋ jar ํ์ผ ๋ช
์ ์ง์ |
--dest <๊ฒฝ๋ก๋ช
> | ์ค์นํ์ผ ๋๋ ์ฑ ์ด๋ฏธ์ง๊ฐ ์ ์ฅ๋ ์์น๋ฅผ ์ง์ (๋๋ -d๋ก ๊ฐ๋จํ ์ฌ์ฉ ๊ฐ๋ฅ) |
--java-options <์ต์
> | JVM ์ต์
์ ์ง์ . ์: -Dfile.encoding=UTF-8 (ํ๊ธ ๊นจ์ง ๋ฐฉ์ง) |
--icon <์์ด์ฝ ์ด๋ฆ> | ์์ด์ฝ ํ์ผ์ ์ด๋ฆ์ ์๋์ ๋๋ ์ ๋์ ์์น๋ก ์ง์ |
--description <์ฑ ์ค๋ช
> | ์ฑ์ ๋ํ ์ค๋ช
์ ์
๋ ฅ. ์: "Application to verify truth of personal custom ID" |
--win-console | ๋ช
๋ น ํ๋กฌํํธ ์ฐฝ์ ๋ณด์ฌ์ฃผ๋ฉฐ ์คํ (๋๋ฒ๊น
์ฉ, ๋ฐฐํฌ ์ ๋ถํ์) |
--app-version <๋ฒ์ > | ์ฑ ๋ฒ์ ์ ์ง์ . ๋์ผํ ๋ฒ์ ์ด ์์ฑ๋๋ฉด ์๋ฌ ๋ฐ์ |
--install-dir <ํด๋๋ช
> | ์คํํ์ผ์ด ๋ง๋ค์ด์ง ์์น๋ฅผ ์ง์ . ์: Program Files ๋๋ AppData ํด๋์ ํ์ ํด๋ |
--win-shortcut | ๋ฐํํ๋ฉด์ ๋ฐ๋ก๊ฐ๊ธฐ๋ฅผ ์์ฑ |
jpackage ๋ช
๋ น์ด์ ์ฃผ์ ์ต์
๋ค์ ์ ๋ฆฌํ ๊ฒ์ผ๋ก, ํจํค์ง ์์
์ ํ ๋ ์ ์ฉํ๊ฒ ์ฌ์ฉํ ์ ์์ต๋๋ค.
Maven
Java ๊ธฐ๋ฐ์ ํ๋ก์ ํธ ๋น๋, ์์กด์ฑ ๊ด๋ฆฌ, ๋ฐฐํฌ, ํ
์คํธ ๋ฑ์ ๋์์ฃผ๋ ํ๋ก์ ํธ ๊ด๋ฆฌ ๋๊ตฌ
โข
์์กด์ฑ ๊ด๋ฆฌ (์์กด ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ด๋ฆฌ)
โข
๋น๋ ์๋ํ
โฆ
์ปดํ์ผ
โฆ
ํ
์คํธ
โฆ
ํจํค์ง
๋ค์ด๋ก๋
(Windows) apache-maven-3.9.9-bin.zip
์์คํ ํ๊ฒฝ ๋ณ์ ์ถ๊ฐ
1.
์์คํ
ํ๊ฒฝ ๋ณ์ ํธ์ง
2.
PATH
3.
C:\~\SETUP\apache-maven-3.9.9\bin
WiX Toolset
Windows์ฉ ์ค์น ํ๋ก๊ทธ๋จ(.msi ํ์ผ ๋ฑ)์ ๋ง๋ค ์ ์๊ฒ ํด์ฃผ๋ ์คํ ์์ค ๋๊ตฌ ๋ชจ์์
๋๋ค.
๋ค์ด๋ก๋
wix314-binaries.zip ํ์ผ์ ๋ค์ด๋ก๋ ๋ฐ์ ์์ถํด์ ํฉ๋๋ค.
์์คํ ํ๊ฒฝ๋ณ์
1.
์์คํ
ํ๊ฒฝ๋ณ์
2.
PATH
3.
C:\~\wix314-binaries
์์ถ ํด์ ํ ํด๋๋ฅผ ์์คํ
ํ๊ฒฝ ๋ณ์ ํจ์ค์ ์ถ๊ฐํด์ฃผ์ธ์
๋น๋ ์ค์ - pom.xml
pom.xml (JavaFX ํ๋ก๊ทธ๋จ)
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.aloha</groupId> <!-- ์กฐ์งID -->
<artifactId>test</artifactId> <!-- ํ๋ก์ ํธID -->
<version>0.0.1</version> <!-- ํ๋ก์ ํธ ๋ฒ์ -->
<!-- ์์ฑ -->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>23</maven.compiler.source>
<maven.compiler.target>23</maven.compiler.target>
<jdk.version>23</jdk.version> <!-- JDK ๋ฒ์ -->
<javafx.version>23</javafx.version> <!-- JavaFX ๋ฒ์ -->
</properties>
<!-- ์์กด์ฑ ๋ผ์ด๋ธ๋ฌ๋ฆฌ -->
<dependencies>
<!-- javaFX -->
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>${javafx.version}</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-fxml</artifactId>
<version>${javafx.version}</version>
</dependency>
<!-- lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.30</version>
<scope>provided</scope>
</dependency>
<!-- MySQL -->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>8.0.32</version>
</dependency>
</dependencies>
<build>
<plugins>
<!-- Java ์ปดํ์ผ๋ฌ -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<release>${jdk.version}</release>
<annotationProcessorPaths>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.30</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
<!-- JavaFX ์คํ -->
<plugin>
<groupId>org.openjfx</groupId>
<artifactId>javafx-maven-plugin</artifactId>
<version>0.0.6</version>
<executions>
<execution>
<id>default-cli</id>
<configuration>
<mainClass>com.aloha.Main</mainClass>
</configuration>
</execution>
</executions>
</plugin>
<!-- JAR ์์ฑ -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<archive>
<manifestEntries>
<Main-Class>com.aloha.Main</Main-Class>
</manifestEntries>
</archive>
</configuration>
</plugin>
<!-- ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํฌํจ fat JAR ์์ฑ -->
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.6.0</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>com.aloha.Main</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
XML
๋ณต์ฌ
JAR ํ์ผ ์์ฑ - mvn clean package
โข
์ฑ์ด๋ฆ-0.0.1-jar-with-dependencies.jar
mvn clean package ๋ช
๋ น์ด๋ก JAR ํ์ผ์ ์์ฑํฉ๋๋ค.
mvn clean package
Bash
๋ณต์ฌ
mvn ์ฃผ์ ๋ช ๋ น์ด
๋ช
๋ น์ด | ์ค๋ช
|
mvn clean | ์ด์ ๋น๋ ๊ฒฐ๊ณผ(target ๋๋ ํ ๋ฆฌ)๋ฅผ ์ญ์ |
mvn package | ์ปดํ์ผ + ํ
์คํธ ํ JAR/WAR ํ์ผ๋ก ํจํค์ง |
mvn compile | src/main/java ์ฝ๋ ์ปดํ์ผ |
mvn test | src/test/java์ ์๋ ํ
์คํธ ์ฝ๋ ์คํ |
mvn install | ํจํค์งํ ํ์ผ์ ๋ก์ปฌ Maven ์ ์ฅ์์ ์ค์น (~/.m2/repository) |
mvn deploy | ์๊ฒฉ Maven ์ ์ฅ์๋ก ์
๋ก๋ (CI/CD์ฉ) |
mvn validate | pom.xml ํ์ผ ๊ตฌ์กฐ์ ์ค์ ํ์ธ |
mvn verify | ํ
์คํธ ๋ฐ ํตํฉ ๊ฒ์ฌ๊น์ง ํ์ธ |
mvn site | ํ๋ก์ ํธ ์ ๋ณด๋ฅผ HTML ํํ์ ๋ฆฌํฌํธ๋ก ์์ฑ |
mvn dependency:tree | ์์กด์ฑ ํธ๋ฆฌ๋ฅผ ๊ณ์ธต ๊ตฌ์กฐ๋ก ์ถ๋ ฅ |
mvn dependency:list | ํ๋ก์ ํธ์ ํฌํจ๋ ๋ชจ๋ ์์กด์ฑ ๋์ด |
mvn archetype:generate | Maven ํ
ํ๋ฆฟ(archetype) ๊ธฐ๋ฐ์ผ๋ก ์ ํ๋ก์ ํธ ์์ฑ |
mvn help:effective-pom | ์ค์ ๋ก ์ ์ฉ๋๋ POM ์ค์ ์ถ๋ ฅ (์์/ํ๋กํ์ผ ํฌํจ) |
mvn versions:display-dependency-updates | ์
๋ฐ์ดํธ ๊ฐ๋ฅํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฒ์ ํ์ธ (์ถ๊ฐ ํ๋ฌ๊ทธ์ธ ํ์) |
App.jar ๋ก ์ด๋ฆ ๋ณ๊ฒฝ
JAR ์คํ ํ ์คํธ (run.bat)
java -jar App.jar
Bash
๋ณต์ฌ
JavaFX ์ ๊ฒฝ์ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐ ๋ชจ๋๊ณผ ํจ๊ป ์คํ๋์ด์ผํ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค.
JavaFX ๋ผ์ด๋ธ๋ฌ๋ฆฌ
โข
javaFX SDK
โข
javaFX jmods
javaw --module-path "lib\javafx-sdk-23.0.2\lib" --add-modules javafx.controls,javafx.fxml -jar App.jar
Bash
๋ณต์ฌ
์ด ๋ช
๋ น์ด๋ฅผ ์ฝ๊ฒ ์คํ์ํค์ง ์ํด์ ๋ฐฐ์น ํ๋ก๊ทธ๋จ run.bat ์ ๋ง๋ค์ด๋ณด์.
@echo off
REM JavaFX ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ฒฝ๋ก ์ค์
set FX_LIB=lib\javafx-sdk-23.0.2\lib
REM JavaFX ์ ํ๋ฆฌ์ผ์ด์
์คํ
start javaw --module-path "%FX_LIB%" ^
--add-modules javafx.controls,javafx.fxml ^
-jar App.jar
exit
Bash
๋ณต์ฌ
Installer ์ ํฌํจํ ํ์ผ ์ค๋น
๐ฆ install
โโโ ๐ App.jar
โโโ ๐ icon.ico
โโโ ๐ lib
Bash
๋ณต์ฌ
graph TD install["๐ฆ install"] install --> App["๐ App.jar"] install --> Icon["๐ icon.ico"] install --> lib["๐ lib"]
Mermaid
๋ณต์ฌ
Installer๋ก ์ค์น ๋์ด์ผ ํ ํ์ผ์ ์ค๋นํด์ฃผ์ธ์!
Installer ๋ฅผ ํตํด ํ๋ก๊ทธ๋จ์ด ์ค์น ๋๋ฉด ์๋์ ๊ฐ์ ๊ฒฝ๋ก์ ํ๋ก๊ทธ๋จ์ด ์์ฑ๋ฉ๋๋ค.
C:\Program Files\MyApp\
โโโ app\
โ โโโ App.jar
โ โโโ icon.ico
โ โโโ lib\
โ โโโ javafx-base-21.0.2.jar
โ โโโ javafx-controls-21.0.2.jar
โโโ MyApp.exe
โโโ runtime\
โ โโโ (์ฌ์ฉ๋ JDK ๋ชจ๋)
Markdown
๋ณต์ฌ
์ด ๋, MyApp.exe ํ๋ก๊ทธ๋จ์ ์คํํ๋ฉด app ํด๋ ์๋ App.jar ๋ฅผ ์คํํ์ฌ ์๋ฐ ํ๋ก๊ทธ๋จ์ ์คํ์์ผ ์ค๋๋ค.
๋๋ ํ ๋ฆฌ/ํ์ผ | ์ค๋ช
|
app/ | ์ฌ์ฉ์๊ฐ ์ง์ ํ JAR ํ์ผ, ๋ฆฌ์์ค, ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ผ๋ค์ด ์ ์ฅ๋๋ ๋๋ ํ ๋ฆฌ |
MyApp.exe | Windows ์คํ ํ์ผ (๋ฐํํ๋ฉด/์์๋ฉ๋ด ๋ฐ๋ก๊ฐ๊ธฐ์ ๋์) |
runtime/ | ๋ชจ๋ํ๋ JDK ๋ฐํ์ ํ๊ฒฝ (jlink๋ก ์์ฑ๋ ์ต์ JRE) |
Installer ํ์ผ ์์ฑ (install.bat)
jpackage ^
--type exe ^
--input . ^
--name App ^
--main-jar App.jar ^
--main-class com.aloha.Main ^
--java-options "--module-path app/lib/javafx-sdk-23.0.2/lib --add-modules javafx.controls,javafx.fxml -Xmx512m -Djava.awt.headless=false" ^
--icon icon.ico ^
--win-dir-chooser ^
--win-menu ^
--win-shortcut
Bash
๋ณต์ฌ
--module-path app/lib/javafx-sdk-23.0.2/lib
Bash
๋ณต์ฌ
์ค์น๋ ํ์ผ๋ค์ app ํด๋ ์๋ ํฌํจ๋๊ธฐ ๋๋ฌธ์ MyApp.exe ๊ธฐ์ค์์ app ํด๋ ์๋์ lib ๋ฅผ ์ฐธ์กฐํ๋๋ก ์ง์ ํฉ๋๋ค.
Installer ๋ฅผ ์์ฑํ๋ ๋ฐฐ์น ํ๋ก๊ทธ๋จ์ ๋ง๋ค์ด ๋ณด์.
โข
@echo off
setlocal
echo [INFO] Creating installer for App...
jpackage ^
--type exe ^
--input . ^
--name MyApp ^
--main-jar App.jar ^
--main-class com.aloha.Main ^
--java-options "--module-path app/lib/javafx-sdk-23.0.2/lib --add-modules javafx.controls,javafx.fxml -Xmx512m -Djava.awt.headless=false" ^
--icon icon.ico ^
--win-dir-chooser ^
--win-menu ^
--win-shortcut
echo [INFO] Installer build complete.
pause
Bash
๋ณต์ฌ