2014-12-15 2 views
0

Похоже, что есть много сообщений о похожих вопросах, однако я не смог найти именно то, что искал.Исключить ресурсы из java maven build

В принципе, у меня есть приложение Java, построенное с использованием Maven в Eclipse. Когда я выполняю проект с помощью Eclipse, он работает правильно, так как он может найти все файлы в моем каталоге ресурсов. Когда я делаю обычную банку с построением зависимостей с использованием maven, она также работает. Однако в последнем пункте я не могу заставить это работать:

Я хотел бы, чтобы ресурсы были исключены из основного исполняемого банку и помещены в каталог на том же уровне, что и сама банка. Это пользователь может просто внести изменения в настройки и выполнить баночку, так:

|--root level 
|-Jar 
|-resources 
    |-log4j.properties 
    |-settings.properties 

У меня есть Maven-Jar-плагин делает это:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-jar-plugin</artifactId> 
    <version>2.4</version> 
    <configuration> 
     <archive> 
     <index>true</index> 
     <manifest> 
      <addClasspath>true</addClasspath> 
      <mainClass>com.org.interfaces.SharepointClient.App</mainClass> 
      <classpathPrefix>lib/</classpathPrefix> 
     </manifest> 
     <manifestEntries> 
      <mode>development</mode> 
      <url>http://org.com</url> 
      <key>value</key> 
      <Class-Path>resources/settings.properties resources/log4j.properties</Class-Path> 
     </manifestEntries> 
     </archive> 
     <excludes> 
      <exclude>settings.properties</exclude> 
      <exclude>log4j.properties</exclude> 
     </excludes> 
    </configuration> 
</plugin> 

И у меня есть Maven сборка -plugin, создающий каталог ресурсов со всеми файлами ресурсов.

Проект собирает и формирует структуру каталогов, как я хочу, однако, файлы классов не могут найти что-либо в каталоге ресурсов, хотя я специально добавил им путь к классам в manifest.mf

Это Manifest для деталей:

Manifest-Version: 1.0 
Build-Jdk: 1.7.0_17 
Class-Path: resources/settings.properties resources/log4j.properties 
lib/log4j-1.2.17.jar lib/jaxws-api-2.2.11.jar lib/jaxb-api-2.2.9.ja 
r lib/javax.xml.soap-api-1.3.5.jar lib/javax.annotation-api-1.2-b03 
.jar lib/jsr181-api-1.0-MR1.jar lib/saxon-9.1.0.8.jar lib/saxon-9.1 
.0.8-dom.jar 
Created-By: Apache Maven 3.0.5 
Main-Class: com.org.interfaces.SharepointClient.App 
key: value 
url: http://org.com 
mode: development 
Archiver-Version: Plexus Archiver 

Когда Выполненная я получаю сообщение об ошибке на этой строке кода:. PropertyLoader.class.getClassLoader() getResourceAsStream ("settings.properties");

Ошибка:

Exception in thread "main" java.lang.NullPointerException 
    at java.util.Properties$LineReader.readLine(Unknown Source) 
    at java.util.Properties.load0(Unknown Source) 
    at java.util.Properties.load(Unknown Source) 
    at com.org.interfaces.SharepointClient.PropertyLoader.getProps(PropertyLoader.java:29) 

EDIT: Я только возникли проблемы с получением Java для загрузки ресурсов, а не зависимостей. Кажется, что они загружаются правильно.

+0

Вы пробовали включать только «ресурсы /» в путь класса? –

+0

Я пробовал, но ничто, кажется, не включает эти ресурсы. Это похоже на то, что classpath становится чем-то переписанным. – gcerkez

+0

Чтобы проверить путь к классу, проверьте, что из 'java-приложения 'находится значение' System.getProperty («java.class.path») '. Вы также можете попробовать использовать 'getSystemResourceAsStream (String name)'. –

ответ

0

Я думаю, что вы делаете это более трудным, чем нужно. Посмотрите на это http://maven.apache.org/guides/getting-started/maven-in-five-minutes.html. Вы должны просто добавить все ваши зависимости в файл pom.xml. Таким образом, всякий раз, когда вы переносите свой код, maven будет использовать файл pom.xml для восстановления проекта со всеми вашими зависимостями. http://mvnrepository.com/ делает это еще проще. Все, что вам нужно сделать, это найти зависимость в репозитории и скопировать ее в файл pom.

+0

Я ценю ответ, но проблема не в зависимостях. У меня есть maven, который получает зависимости в соответствии с инструкциями. У меня возникли проблемы с получением ресурсов, таких как файлы свойств, в пути к классам, когда они не связаны с основным файлом jar – gcerkez