어쩌다보니 Maven에 익숙해졌고, 이번 프로젝트는 Mybatis, JavaFX가 함께 들어가는 프로젝트가 되었다. 이걸 만드는데까지는 괜찮았는데, 배포하려니 또 어렵다. 중요한건 jre와 javafx-sdk가 jar파일 또는 exe파일과 함께 있어야 한다는 것이다.
1. jre
각종 버전 문제를 피하기 위해 배포할때엔 런타임환경을 함께 구성해서 배포하는게 낫겠다고 판단했다.
jre는 새로 다운받는게 아니라, jdk폴더의 bin, lib, conf폴더만 복사해서 가져오면 된다.
/jre
ㄴ/bin
ㄴ/lib
ㄴ/conf
<2025.07.10수정>
위의 방식으로는 자바가 전혀 안깔린 PC에서는 작동하지 않는다. 아래의 jlink 명령어로 jre를 만든다. 이렇게하면 javafx까지 포함된 jre가 만들어진다. 단, 이러고도 실행이 되지 않을 수 있다. 그럴땐 그냥 JDK를 복사해서 jre라고 바꾼 후 진행한다.
jlink --module-path "%JAVA_HOME%\jmods;C:\javafx-sdk-17.0.15\lib" ^
--add-modules java.base,java.desktop,java.logging,java.sql,java.xml,javafx.controls,javafx.fxml ^
--output jre
2. javafx-sdk
인텔리제이에서 pom.xml 설정으로 라이브러리가 받아졌겠지만, 다시한번 적당한 버전을 받는다.
- 공식사이트: https://gluonhq.com/products/javafx
JavaFX - Gluon
Roadmap Release GA Date Latest version Minimum JDK Long Term Support Extended or custom support Details 25 September 2025 early access 22 no 24 March 2025 24.0.1 (April 2025) 22 no upon request details 23 September 2024 23.0.2 (January 2025) 21 no upon req
gluonhq.com
- 직접다운로드: https://download2.gluonhq.com/openjfx/17.0.15/openjfx-17.0.15_windows-x64_bin-sdk.zip
3. 폴더 구성
javaFX maven 프로젝트를 빌드하면 Target 폴더에 jar파일이 생성되게 된다. 동일한 폴더에 jre와 javafx-sdk를 복사해 넣으면 작동 환경은 구성된 것이다. 그런데 이렇게 해도 잘 안된다. 그냥 javafx-sdk에 있는 lib, bin을 jre폴더에 추가 복사해넣는게 제일 낫다.
4. pom.xml
우선 jar파일이 정상적으로 실행이 되어야한다. 그런데 실행하다보면 MainClass가 빠졌다는 등의 오류가 발생하는 경우가 있다. 이런경우 maven-shade-plugin을 사용해 Fat JAR을 생성한다. 아래 플러그인 부분에서 Fat JAR만들기 부분 참조
<plugins>
<!-- 컴파일러 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.11.0</version>
<configuration>
<source>17</source>
<target>17</target>
</configuration>
</plugin>
<!-- ✅ Fat JAR (실행 가능한 JAR) 만들기 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.5.0</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.example.javafx05.HelloApplication</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
실행은 우측의 Maven아이콘 클릭 후, 수명주기 -> package를 더블 클릭하면 패키징이 되면서 jar파일이 생성된다.
java --module-path "C:\javafx-sdk-17.0.15\lib"
--add-modules javafx.controls,javafx.fxml
-jar target/javafx05-1.0-SNAPSHOT-shaded.jar
jar 파일 생성 후에는 해당 폴더에서 위의 형식으로 명령어를 주면 실행되는 모습을 볼 수 있다.
5. Launch4j로 exe파일 만들기
launch4j는 지금 실행한 환경을 하나의 파일로 packaging하는 것 뿐이다.
우선, 아웃풋 파일명과 Jar파일의 위치를 인식시키고..
그 다음으로는 미리 준비해둔 jre의 위치, 최소 jre버전정보, 그리고 JVM option을 넣어준 뒤 빌드하면 된다. 마지막 배포시에도 jre와 java-fx폴더는 exe파일과 동일한 폴더에 계속 함께 존재해야 실행된다.
<2025.07.10 수정>
bundled jre path는 exe파일과 같은 폴더에 넣을 예정이므로, 그냥 "jre"다.
- 끝 -
'Programming > Java_Etc' 카테고리의 다른 글
jpackage를 이용한 배포 (0) | 2025.07.16 |
---|---|
JavaFX - MyBatis - Serial 통신 예제 (1) | 2025.06.26 |
Java 폴더 하위폴더 하위 파일 복사 (0) | 2024.11.13 |
JavaFX와 Mybatis 연동하기 - Maven (1) | 2024.09.11 |
Java Mybatis설정에서 MS-SQL연결 설정방법 (1) | 2024.09.05 |