Language/Java

maven runnable jar에서 resouces 폴더 classpath 추가

아르비스 2014. 11. 12. 15:42

Spring을 안쓰고 Resources file을 load 하는 경우, 

eclipse와 runtime시 classpath가 맞지 않는 문제가 발생한다.

jar로 실행하면 resoues 하위의 file이 없다고 나온다.

이런경우, Manifest에 아래와 같이 추가하여 문제를 해결할 수 있다.


<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-jar-plugin</artifactId>

<configuration>

       <classesDirectory>${project.build.directory}/classes</classesDirectory>

<includes>

<include>com/sds/snnet/**</include>

      </includes>

<archive>

<manifest>

<addClasspath>true</addClasspath>

<classpathPrefix>snnet-lib/</classpathPrefix>

<addDefaultImplementationEntries>true

                                     </addDefaultImplementationEntries>

</manifest>

<manifestEntries>

<Class-Path>. resources/</Class-Path>

</manifestEntries>

   </archive>

</configuration>

</plugin>



기타 pom에 자주 쓰이는 tag는 참조

<profile>

  <id>server</id>

  <build>

  <finalName>snnet-server-${version}</finalName>

  <plugins>

<plugin>

    <artifactId>maven-compiler-plugin</artifactId>

       <version>3.1</version>

       <configuration>

         <source>1.7</source>

         <target>1.7</target>

       </configuration>

   </plugin>

   <plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-dependency-plugin</artifactId>

<executions>

<execution>

<id>copy-dependencies</id>

<phase>prepare-package</phase>

<goals>

<goal>copy-dependencies</goal>

</goals>

<configuration>

<outputDirectory>${project.build.directory}/snnet-lib</outputDirectory>

<overWriteReleases>true</overWriteReleases>

<overWriteSnapshots>false</overWriteSnapshots>

<overWriteIfNewer>true</overWriteIfNewer>

</configuration>

</execution>

</executions>

</plugin>

<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-resources-plugin</artifactId>

<version>2.5</version>

<executions>

<execution>

<id>copy-resources</id>

<!-- here the phase you need -->

<phase>generate-sources</phase>

<goals>

<goal>copy-resources</goal>

</goals>

<configuration>

<outputDirectory>${project.build.directory}/resources</outputDirectory>

<resources>

<resource>

<directory>src/main/resources</directory>

<filtering>false</filtering>

</resource>

</resources>

</configuration>

</execution>

</executions>

</plugin>

<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-jar-plugin</artifactId>

<configuration>

<classesDirectory>${project.build.directory}/classes</classesDirectory>

<includes>

<include>com/sds/snnet/**</include>

</includes>

<archive>

<manifest>

<addClasspath>true</addClasspath>

<classpathPrefix>snnet-lib/</classpathPrefix>

<mainClass>com.sds.snnet.daemon.ServerDaemon</mainClass>

<addDefaultImplementationEntries>true</addDefaultImplementationEntries>

</manifest>

<manifestEntries>

<Class-Path>. resources/</Class-Path>

</manifestEntries>

</archive>

</configuration>

</plugin>

  </plugins>

  </build>

  </profile>

  <id>server</id>

  <build>

  <finalName>snnet-server-${version}</finalName>

  <plugins>

<plugin>

    <artifactId>maven-compiler-plugin</artifactId>

       <version>3.1</version>

       <configuration>

         <source>1.7</source>

         <target>1.7</target>

       </configuration>

   </plugin>

   <plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-dependency-plugin</artifactId>

<executions>

<execution>

<id>copy-dependencies</id>

<phase>prepare-package</phase>

<goals>

<goal>copy-dependencies</goal>

</goals>

<configuration>

<outputDirectory>${project.build.directory}/snnet-lib</outputDirectory>

<overWriteReleases>true</overWriteReleases>

<overWriteSnapshots>false</overWriteSnapshots>

<overWriteIfNewer>true</overWriteIfNewer>

</configuration>

</execution>

</executions>

</plugin>

<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-resources-plugin</artifactId>

<version>2.5</version>

<executions>

<execution>

<id>copy-resources</id>

<!-- here the phase you need -->

<phase>generate-sources</phase>

<goals>

<goal>copy-resources</goal>

</goals>

<configuration>

<outputDirectory>${project.build.directory}/resources</outputDirectory>

<resources>

<resource>

<directory>src/main/resources</directory>

<filtering>false</filtering>

</resource>

</resources>

</configuration>

</execution>

</executions>

</plugin>

<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-jar-plugin</artifactId>

<configuration>

<classesDirectory>${project.build.directory}/classes</classesDirectory>

<includes>

<include>com/sds/snnet/**</include>

</includes>

<archive>

<manifest>

<addClasspath>true</addClasspath>

<classpathPrefix>snnet-lib/</classpathPrefix>

<mainClass>com.sds.snnet.daemon.ServerDaemon</mainClass>

<addDefaultImplementationEntries>true</addDefaultImplementationEntries>

</manifest>

<manifestEntries>

<Class-Path>. resources/</Class-Path>

</manifestEntries>

</archive>

</configuration>

</plugin>

  </plugins>

  </build>

  </profile>