2016-10-18 2 views
0

Я пытаюсь сделать доступ к файлу в другом каталоге за пределами мой проект java.Добавить папку в classpath за пределами проекта java, используя Maven

структура такова:

. 
|-- resources 
| |-- api 
| | |-- data.json 
|-- src 
| |-- java 
| | |-- .classpath 
| | |-- pom.xml 
| | |-- src 

Мой Проект Java расположен в ./src/java/

Мой каталог ресурсов находится в ./resources/api/

Я изменил .classpath из src/java/ так:

<classpathentry kind="lib" path="./../../resources/api"/> 

И я пытаюсь получить доступ к ресурсу следующим образом:

String filename = "data.json"; 

    URL file_url = this.getClass().getClassLoader().getResource(filename); 
    System.out.println("URL IS "+file_url); 
    //outputs null 

    file_url = this.getClass().getResource(filename); 
    System.out.println("URL IS "+file_url); 
    //outputs null 

    InputStream in = this.getClass().getResourceAsStream(filename); 
    System.out.println("InputStream IS "+in); 
    //outputs null 

    file_url = this.getClass().getResource("/api/"+filename); 
    System.out.println("URL IS "+file_url); 
    //outputs null 

    file_url = this.getClass().getResource("api/"+filename); 
    System.out.println("URL IS "+file_url); 
    //outputs null 

    file_url = this.getClass().getResource("resources/api/"+filename); 
    System.out.println("URL IS "+file_url); 
    //outputs null 

    file_url = this.getClass().getResource("/resources/api/"+filename); 
    System.out.println("URL IS "+file_url); 
    //outputs null 

    file_url = this.getClass().getResource("./"+filename); 
    System.out.println("URL IS "+file_url); 
    //outputs null 

    file_url = this.getClass().getResource("/"+filename); 
    System.out.println("URL IS "+file_url); 

Все они возвращаются null. Кто-нибудь видит что-то, что я сделал не так?

==========================

РЕШЕНИЕ

Довольно глупо, но мне просто нужно, чтобы изменить свой Maven pom.xml, чтобы добавить каталог в путь к классам, как указано here.

Я обновил свой pom.xml так:

<plugin> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <configuration> 
     <additionalClasspathElements> 
       <additionalClasspathElement>./../../resources/api/</additionalClasspathElement> 
     </additionalClasspathElements> 
    </configuration> 
</plugin> 

Видимо затмение использует .classpath и Maven использует pom.xml.

+0

, если вы работаете с Maven, папка для источников производства должны быть 'SRC/main/java', а не 'src/java', как показано в вашем вопросе. – JimHawkins

ответ

1

Может быть, магия может быть сделано с:

getClass().getResource("/api/data.json"); 

или (на основе использования)

getClass().getResourceAsStream("/api/data.json"); 
+0

По-прежнему возвращает null:/Я обновил свой вопрос с добавленными тестами. Я думаю, что что-то не так с тем, как я добавляю «resource/api» к пути к классам, потому что я думаю, что если бы он был в пути к классам, эта стратегия работала бы – Kayvar

+0

@Kayvar Какая 'IDE' вы используете? – GOXR3PLUS

+1

Я строил с помощью maven и просто понял, что, вероятно, не использует '.classpath' .. lol whoops! Работает сейчас! Я добавил материал classpath в свой pom.xml – Kayvar

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