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> |