Ресурс загружен в Eclipse, но не в IntelliJ

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

src
  |__view
       |__TweetView.java
       |__TweetView.html

В TweetView.java я пытаюсь получить URL ресурса TweetView.html следующим образом:

String htmlDocName = "TweetView.html";
Class thisClass = this.getClass();
URL htmlResourceURL = thisClass.getResource(htmlDocName);

Это хорошо работает в Eclipse (Neon.2), но в IntelliJ (2017.2.3), htmlResourceURL всегда null, Я знаю, что местоположение файла HTML может быть не идеальным (должно быть в папке ресурсов), но по разным причинам я не должен менять это прямо сейчас.

Я заметил, что папка src помечена как папка "Источники" в структуре проекта в IntelliJ, а ее подпапки явно не помечены. Настройки проекта не являются общими для Eclipse и IntelliJ, поскольку в проекте используется Maven. Примечание. Проблема указана в отношении запуска проекта как Java-приложения непосредственно из соответствующих IDE, а не экспорта JAR/WAR.

Я видел, что у IntelliJ есть эти "шаблоны ресурсов", которые определяют, какие типы файлов следует рассматривать как ресурсы, но я не мог заставить его работать, добавив.html, ни с подстановочными знаками, ни без них (и, согласно веб-сайту IntelliJ,.html в любом случае считается ресурсом по умолчанию).

У кого-нибудь есть идея, в чем может быть проблема? Поскольку он работает в Eclipse, в идеале я хотел бы решить проблему с помощью конфигурации в IntelliJ, а не путем изменения кода.

РЕДАКТИРОВАТЬ: Вот мой POM:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>demo</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<build>
    <sourceDirectory>src</sourceDirectory>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.5.1</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
    </plugins>
    <resources>
        <resource>
            <directory>src/view</directory>
        </resource>
    </resources>
</build>
<dependencies>
    <dependency>
        <groupId>com.twitter</groupId>
        <artifactId>hbc-twitter4j</artifactId>
        <version>2.2.0</version>
    </dependency>
    <dependency>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-server</artifactId>
        <version>9.4.0.M1</version>
    </dependency>
</dependencies>

1 ответ

Решение

В Eclipse, если вы просто выполните "Запуск от имени Java-приложения", я не думаю, что он на самом деле выполняет Maven. Intellij, с другой стороны, обычно обнаруживает, что у вас есть проект Maven, и запускает необходимые задачи для запуска приложения.

По крайней мере, это мой опыт использования обоих

Там есть target/classes/TweetView.html и target/classes/view/TweetView.java

Вы устанавливаете src каталог для источников (файлы Java), но ресурсы в src/view папка.

Итак, все классы Java в папке просмотра находятся в папке просмотра. Все файлы (кроме Java) в папке представления перемещаются в корневой путь к классам, поэтому загрузчик классов не знает, где искать этот класс

Мое предложение состояло бы в том, чтобы переместить назад файлы Java в предпочтительное местоположение Mavens src/main/javaЗатем вы можете оставить файлы HTML там, где они находятся.

Другие вопросы по тегам