我知道,这里已经提出了类似的问题,但它们似乎都不符合我的确切问题。我有以下(部分)目录结构:
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>
答案 0 :(得分:1)
在Eclipse中,如果您只是执行#34;作为Java应用程序运行&#34;,我认为它实际上并不执行Maven。另一方面,Intellij通常会检测到你有一个Maven项目,并将运行必要的任务来运行应用程序。
至少,这是我使用两者的经验
目标/类/ TweetView.html和目标/类/视图/ TweetView.java
您可以将源(Java文件)的src
目录设置为src/view
文件夹中的资源。
因此,视图文件夹中的所有Java类都保留在视图文件夹中。视图文件夹中的所有文件(Java除外)都被移动到根类路径,因此类加载器不知道从给定类中查找的位置
我的建议是将Java文件移回Mavens首选位置src/main/java
,然后将HTML文件保留在原来的位置