Legacy Application을 Executable Jar로 만들자
어떤 동영상을 변환하는 배치가 있다. 이 배치는...
- 빌드도구가 적용되어있지 않고
- 프로젝트 내부에 각종 설정파일이 들어있고
- 수정한 클래스 파일을 하나씩 복사 붙여넣기로 배포한다.
- 실행은 start.bat을 실행시킨다. 이 파일은 java 실행명령에 클래스패스와 메인 클래스를 호출하는 방식으로 동작한다.
이 배치를 Executable Jar로 만들고 싶었다. 이렇게 바꿔야 될 프로그램이 2개정도 더 있어서 기록해본다.
메이븐 프로젝트로 변환한다.
- 인텔리제이의 경우
프로젝트 우클릭 → Add Framework Support → Maven
을 추가하면pom.xml
이 생성된다. - 팀에서 이클립스를 사용중이라면 다른사람도 메이븐 프로젝트로 열리도록
convert
를 잘 해주자.
- 인텔리제이의 경우
의존하고 있는 라이브러리를 모두
pom.xml
에 작성한다.커스텀 라이브러리가 존재한다면
mvn install
로 로컬 리포지토리(.m2
)에 설치한다.https://stackoverflow.com/questions/4955635/how-to-add-local-jar-files-to-a-maven-project 참고해서 설치했다.
mvn install:install-file \ -Dfile=<path-to-file> \ -DgroupId=my-group-id \ -DartifactId=my-artifact-id \ -Dversion=1.0.0 \ -Dpackaging=jar \ -DgeneratePom=true
이후 C:\Users\{USERNAME}\.m2\repository 에 들어가 보면 지정한
group-id
이름으로 된 폴더가 확인된다.기존 방식과 동일하게 의존성을 추가한다.
<dependency> <groupId>my-group-id</groupId> <artifactId>my-artifact-id</artifactId> <version>1.0.0</version> </dependency>
프로젝트 리포지토리를 만들고 싶다면 위
mvn install
수행 후 아래와 같이 설정한다.프로젝트에 폴더를 생성후 앞에서 생성 된
group-id
폴더를 복사한다.아래와 같이 리포지토리를 추가하고 마찬가지로 의존성을 추가하면 된다.
<repositories> <repository> <id>my-project-repositoy</id> <url>file:///${project.basedir}/project-repo</url> </repository> </repositories>
의존성과 함께 Executable Jar로 번들링하는 빌드 옵션을 작성한다.
https://www.baeldung.com/executable-jar-with-maven 를 참고하면 되는데 나는 maven-shade-plugin을 사용했다.거의 그대로 사용하면 잘 동작한다.
jar
를 실행했을 때 동작 할 메인함수를 잘 지정해주자.<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <executions> <execution> <goals> <goal>shade</goal> </goals> <configuration> <shadedArtifactAttached>true</shadedArtifactAttached> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <mainClass>com.mypackage.MyConvertMain</mainClass> </transformer> </transformers> </configuration> </execution> </executions> </plugin>
추가로 설정파일을 외부에 위치시키도록 구현했는데 프로퍼티를 로드하는 부분은 Properties 클래스로 로딩하던 부분을 일부 수정했다.
로컬, 개발, 운영 모두 잘 동작할 수 있도록 외부경로와 classpath를 모두 체크하도록 로직을 구성했다.
이 배치는...
빌드도구가 적용되어있지 않고프로젝트 내부에 각종 설정파일이 들어있고- 수정한 클래스 파일을 하나씩 복사 붙여넣기로 배포한다.
- 실행은 start.bat을 실행시킨다. 이 파일은 java 실행명령에 클래스패스와 메인 클래스를 호출하는 방식으로 동작한다.
➡️ 이제 자동 배포를 준비해봐야겠다.