본문 바로가기
자바웹프로그래밍/JAVA

maven을 통한 jar 생성할때 dependency(의존성) library 포함 후 jar 생성방법

by 디찌s 2023. 1. 9.
728x90
반응형

 

*도움이 되셨다면 광고 한번 클릭 부탁드립니다! 제게 큰 힘이됩니다!

 

 

maven 을 통해 jar를 생성할경우 아래와같은 코드를 maven에 삽입한다.

 

<build>
        <plugins>
          <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <addExtensions>true</addExtensions>
                            <mainClass>ReportMakerMain</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
        </plugins>
</build>

 

 

하지만 위와같은 코드를 삽입후 maven install을 할경우에 

 

실행은 잘되지만, 의존성 library들은 jar 패키지에 포함되어있지 않아 에러가 발생한다!

 

위와같은 문제에 두가지 해결방법이 있는데 첫번째는

 

1. 종속된 라이브러리들을 외부로 뺴낸뒤 manifest.mf에 라이브러리들을 맵핑하여 정상 작동하도록 한다.

 

<build>
<plugins>
<plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <configuration>
                <outputDirectory>${project.build.directory}/lib</outputDirectory>
                <excludeTransitive>false</excludeTransitive> 
                <stripVersion>false</stripVersion>
            </configuration>
            <executions>
                <execution>
                    <id>copy-dependencies</id>
                    <phase>package</phase>
                    <goals>
                        <goal>copy-dependencies</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        <!-- Add LIB folder to classPath -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>2.4</version>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <classpathPrefix>lib/</classpathPrefix>
                    </manifest>
                </archive>
            </configuration>
        </plugin>
        </plugins>
        </build>

 

위와 같은 코드를 사용하면 패키징 경로인 target/lib 에 의존성 라이브러리들이 저장되고 .jar 파일이 이 폴더를 바라봐서

 

정상 작동하도록 한다. 이방식으로 jar를 사용할경우엔 'lib'폴더와 'jar'파일을 함께 배포하여야 정상작동하므로 만약에 lib폴더를 빼먹고

 

배포하거나할경우 아찔한 상황으로 이어질수있다. 그래서 위 방식이 아닌 의존성 라이브러리들을 jar 안에 패키징하여 배포하는 법을 적으려고한다.

 

2. maven 재조립 플러그인을 통해 jar 파일안에 종속된 라이브러리들을 패키징 하는방법

 

<build>
<plugins>
<plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <addExtensions>true</addExtensions>
                            <mainClass>ReportMakerMain</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>3.1.0</version>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>ReportMakerMain</mainClass>
                        </manifest>
                    </archive>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>
                <executions>
                    <execution>
                        <id>assemble-all</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>


        </plugins>
        </build>

 

위와 같은 maven plugins 태그에 'maven-assembly-plugin' 을 삽입한후 다시 maven install 을하면

 

먼저 기존과 동일한 .jar가 생겨나고 이것을 재조립한후 의존성 라이브러리들을 주입한후 다시 패키징하여,

 

'-jar-with-dependencies' 이름이 붙은 파일이 패키징되어 배포된다.

 

위 패키징을 그대로사용하면 의존성 라이브러리들이 추가된 상태로 실행이 가능하다.

 

 

 

728x90
반응형

댓글