2015-04-01 2 views
0

Так что я имею следующую структуру папок:Как добавить внешнюю папку в путь класса?

  • Project
    • Lib (работает баночка из этой папки)
    • свойств (свойства файл для загрузки в этой папке)

Я пытаюсь загрузить файл свойств через X.class.getClassLoader(). GetResource ("properties/fileName"). Этот метод работает в eclipse, но когда я создаю jar с помощью maven, он не может найти файл, предоставляя исключение, не найденное в файле.

Я подозреваю, что папка не находится в пути к классам, потому что если я запустил getClassLoader(). GetResources (""), папка свойств никогда не появляется. Я пробовал все предложения в предыдущих вопросах о stackoverflow, но до сих пор никто не работал.

Я также попытался запустить java -cp и -classpath, но он все еще не удался.

ответ

0

При использовании Maven файлы, такие как *.properties и любые другие несовместимые файлы, должны находиться в папке src/main/resources, по умолчанию должны быть доступны.

Кроме того, я бы рекомендовал вам использовать Thread.currentThread().getContextClassLoader(), чтобы получить надлежащий загрузчик классов, чтобы загрузить ресурсы.

Во всяком случае, если вы хотите иметь свою собственную папку на пути к классам, я предлагаю вам добавить в качестве ресурса, в pom.xml, как это:

<project> 
    ... 
    <build> 
     ... 
     <resources> 
      <resource> 
       <!-- The folder you want to be a resource (from project root folder), like: project/properties --> 
       <directory>properties</directory> 
       <!-- Filtering if Maven should post-process text files to find and replace ${key} params: in most cases, leave it false --> 
       <filtering>false</filtering> 
      </resource> 
     </resources> 
    </build> 
</project> 
+0

Когда я попробовать то, что вы предложили, getClassLoader(). getResources ("") находит URL-адрес, но когда он передается в конструктор FileInputStream, я получаю исключение, не найденное в файле. Мне хотелось бы использовать Thread.currentThread(). GetContextClassLoader(), но я застрял в устаревшем коде ... – StickStack

+0

Я думаю, что ваш загрузчик классов не видит файл. Разве нет способа изменить загрузчик классов? Он может решить эту проблему для вас ... Во всяком случае, я займу некоторое время и проверю обходной путь. –

+1

Classloader никогда не видит файл, потому что он не находится на пути к классам, независимо от того, что я делаю. Мне хотелось бы изменить загрузчик классов, но я не могу. Я сделал работу вокруг, где я больше не использую загрузчик классов, поэтому на данный момент он «исправлен». Спасибо за помощь, не нужно тратить свое время. – StickStack

Смежные вопросы