【问题标题】:Resource is loaded in Eclipse but not in IntelliJ资源在 Eclipse 中加载,但在 IntelliJ 中没有
【发布时间】:2017-09-10 14:40:42
【问题描述】:

我知道,这里也有人问过类似的问题,但似乎没有一个适合我的确切问题。我有以下(部分)目录结构:

src
  |__view
       |__TweetView.java
       |__TweetView.html

在 TweetView.java 中,我尝试获取 TweetView.html 的资源 URL,如下所示:

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 的项目结构中被标记为“Sources”文件夹,并且它的子文件夹没有明确标记。项目设置不会在 Eclipse 和 IntelliJ 之间共享,因为该项目使用 Maven。注意:问题是针对直接从各自的 IDE 中将项目作为 Java 应用程序运行而不是 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>

【问题讨论】:

  • 因为项目使用了 Maven... 你是否让 Maven 明确地将所有 src/view/*.html 文件移动到应用程序的类路径中?也就是说,代码编译运行后src/不存在
  • 是的,我尝试将它作为资源添加到 pom.xml 中的 下,但它没有改变任何东西。它特别令人困惑,因为它在 Eclipse 中工作,无需对 pom 进行任何更改。
  • 有趣。有 target/classes/TweetView.html 和 target/classes/view/TweetView.java。 TweetView.html 资源不再位于视图文件夹中,而是向上移动...
  • 正是问题所在。理想情况下,您拥有src/main/javasrc/main/resources。否则,您需要修改 POM
  • 好的,我明白了,谢谢你的回答。我不介意更改 POM,或者如果需要,更改项目结构。尽管如此,我还是会看看是否有人可以解释为什么 Eclipse 不存在这个问题,只是出于好奇 =)。

标签: java eclipse intellij-idea resource-loading


【解决方案1】:

在 Eclipse 中,如果您只是执行“作为 Java 应用程序运行”,我认为它实际上不会执行 Maven。另一方面,Intellij 通常会检测到您有一个 Maven 项目,并会运行必要的任务以使应用程序运行。

至少,这是我使用两者的经验

有 target/classes/TweetView.html 和 target/classes/view/TweetView.java

您为源代码(Java 文件)设置了 src 目录,但将资源设置为 src/view 文件夹。

因此,视图文件夹中的所有 Java 类都保留在视图文件夹中。视图文件夹中的所有文件(Java 除外)都移动到根类路径,因此类加载器不知道从给定类中查找的位置

我的建议是将 Java 文件移回 Maven 首选位置 src/main/java,然后您可以将 HTML 文件保留在它们所在的位置

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多