작성한 코드를 라이브러리 형식으로 만들기 위해 .jar
파일로 만들었다. 내가 세팅한 버전 등에 맞게 내보내기 위해 + 설정한 dependency 까지 보내주기 위하여 설정하였다.
스펙
그전에 앞서, apache maven project 사이트에서 말하는 최소 사양은 다음과 같다.
두 가지 버전이 있다.
maven-assembly-plugin 사용:
내부에 전 dependency를 저장하여 보내주기 때문에 용량이 크다.
maven-jar-plugin + maven-dependency-plugin 함께 사용:
manifest.mf 파일에 라이브러리의 상대경로를 저장해서 불러오도록 한다.
용량문제 + 1의 경우 conflict 문제가 있다는 말이 있어 2를 선택함.
출처
실제로 2로 할 때의 용량이 26KB 인데 반해 1의 경우 4600KB 정도로 용량차이가 큼.
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id> <!-- this is used for inheritance merges -->
<phase>package</phase> <!-- bind to the packaging phase -->
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<packageName>com.demo.sample</packageName>
<classpathPrefix>lib/</classpathPrefix>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>false</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
필요한 부분들
main()
가 있으면 포함해야 함.버전 세팅에도 두가지 방법이 있다.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<encoding>utf-8</encoding>
</configuration>
</plugin>
<properties>
<java.version>1.8</java.version>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
가능하다. 아래와 같이 pom.xml 에서 설정가능.
<groupId>com.demo</groupId>
<artifactId>demo-sample</artifactId>
<version>1.0.0</version>
<name>sample</name>
<description>DEMO Java Sample project for Spring Boot</description>
[...]
<build>
<finalName>${project.artifactId}-${project.version}</finalName>
</build>
<finalName>
에 정해진 대로 : demo-sample-1.0.0.jarmaven-jar-plugin
의 <packageName>
을 따름 : com.demo.sampleintellij 기준으로 maven - lifecycle - clean 후 package 로 하면 target
폴더에 원하는 .jar
가 만들어진다. 이 파일은 라이브러리형식으로 되었기 때문에 다른 프로젝트에서 쓸 수 있다-!
자세한 설명보러가기 👉 docs
<archive>
<addMavenDescriptor/>
<compress/>
<forced/>
<index/>
<pomPropertiesFile/>
<manifestFile/>
<manifest>
<addClasspath/>
<addDefaultEntries/>
<addDefaultImplementationEntries/>
<addDefaultSpecificationEntries/>
<addBuildEnvironmentEntries/>
<addExtensions/>
<classpathLayoutType/>
<classpathPrefix/>
<customClasspathLayout/>
<mainClass/>
<packageName/>
<useUniqueVersions/>
</manifest>
<manifestEntries>
<key>value</key>
</manifestEntries>
<manifestSections>
<manifestSection>
<name/>
<manifestEntries>
<key>value</key>
</manifestEntries>
<manifestSection/>
</manifestSections>
</archive>
https://maven.apache.org/plugins/maven-jar-plugin/