当直接使用Java
运行我的项目时,我可以确认某个特定的方法能够通过getClass().getClassLoader().getResource(path)获取资源,其中path为docs/info.md
,并且在src/main/resources/docs/info.md
中存在一个文件
在项目与Maven一起打包到最终的可执行文件。jar中之后,我可以确认路径docs/info.md
已经通过jar tf myproject.jar
包含
但是,当执行该。jar时,相同的getClass().getClassLoader().getResource(path)返回null。
以下是MyProject.pom:
<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<!-- io.outright.myproject [parent] -->
<parent>
<groupId>io.outright</groupId>
<artifactId>myproject</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<!-- io.outright.myproject -->
<groupId>io.outright.myproject</groupId>
<artifactId>hub</artifactId>
<version>1.0-SNAPSHOT</version>
<name>hub</name>
<!-- props -->
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<!-- deps -->
<dependencies>
<!-- ....removed for readability.... -->
</dependencies>
<!-- build -->
<build>
<resources>
<resource>
<directory>${basedir}/src/main/resources</directory>
<includes>
<include>**/*</include>
</includes>
</resource>
</resources>
<plugins>
<!-- Integration tests -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.19</version>
<executions>
<execution>
<id>integration-test</id>
<phase>integration-test</phase>
<goals>
<goal>integration-test</goal>
</goals>
</execution>
<execution>
<id>verify</id>
<phase>verify</phase>
<goals>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.5.1</version>
<inherited>true</inherited>
<configuration>
<source>${maven.compiler.source}</source>
<target>${maven.compiler.target}</target>
</configuration>
</plugin>
<plugin>
<!-- Build an executable JAR -->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<!--<classpathPrefix>lib/</classpathPrefix>-->
<mainClass>io.outright.myproject.Main</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.4.3</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<artifactSet>
<excludes>
<exclude>junit:junit</exclude>
<!--<exclude>log4j:log4j:jar:</exclude>-->
</excludes>
</artifactSet>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
使用GetResourceAcstream
而不是GetResource
。GetResource
返回文件的URL,而不是文件本身。然后将inputstream
写入文件,并使用该文件。
ClassLoader classLoader = getClass().getClassLoader();
if (classLoader.getResourceAsStream(filePath) == null) {
// throw error
}
InputStream inputStream = classLoader.getResourceAsStream(filePath);
// write input stream to a file
我也面临同样的问题。这可能会有所帮助:在自己的Mojo中获取maven插件的目录路径
问题内容: 我在Eclipse Helios中创建了一个带有单个子模块的最小Maven项目。 在文件夹中,我放置了一个文件 java中,我创建了一个包含单个类的包,该类执行以下操作: 但是当我将代码作为junit 4单元测试运行时,我只是得到了NullPointerException。以前,这已经工作了一百万次了。有任何想法吗? 我遵循了此指南: 但仍然出现相同的错误。 问题答案: 使用时 get
问题内容: 我有这个测试应用程序: 当我从Eclipse运行它时,出现错误: 类路径(来自.CLASSPATH文件) 在我的c:\ project \ src文件夹中,我只有Test.java文件和包含pacman.png的’assets’目录。 我在做什么错以及如何解决? 问题答案: 我会这样: “ /assets/pacman.png”是绝对位置,而“ assets / pacman.png”
我的问题是关于以下代码示例: 我查看了Java-API,发现ImageIO类中有3种不同的read()方法: 1.: read(文件输入) 2.:读取(ImageInputStream) 3.:读取(输入流输入) 4.: read(URL输入) 我的问题是:在这个例子中使用了这四种方法中的哪一种?我有点困惑,因为在这个例子中 “getClass()”在这里返回“BufferedImageLoade
我正在尝试加载我的 *.fxml 文件,这些文件位于不同的包中,打包在 JAR 中。 我的文件夹结构:(所有文件夹都在类路径中) 正如这里提到的,我使用以下语句来加载FXML文件。(没有前导斜杠“/”)该方法在文件中调用。 如果我在eclipse中运行这个项目,这工作得很好,但是如果我执行JAR(它是用Gradle创建的),就会出现< code > Java . lang . illegalsta
我正在尝试将我从eclipse制作的pacman游戏导出到。罐子包装。问题是,尽管eclipse上的一切都运行良好,但当。jar已导出,我使用的资源无法正确加载。我将它们放在一个单独的/res文件夹中,该文件夹位于构建路径上。我通过以下方式访问它们: 我做错了什么?这里是我得到的错误的一个例子(只有在eclipse上导出的. jar中运行良好)
这是我的模块信息: 这是我的父gradle构建文件: 这是我的客户端模块构建文件: 我正在尝试获取FXMLLoader的资源,但我根本无法让它工作。我已经挣扎了两个小时,现在我真的很绝望。我尝试了所有可能的文件名组合,每个可能的位置,但仍然返回null。 我还尝试了,但它也不工作。 有人能帮我吗?我将非常感激。
问题内容: 这个问题在很多地方都被问到,变化不尽。例如Java-getClassLoader()。getResource()不仅使我烦恼不已。)我仍然无法使其正常工作。 这是一个代码片段: 此作品-请注意,我硬编码的路径,包含剪辑文件,该文件的目录 是 有,而且 是 在同一目录作为我的.class文件。las,注释掉的代码仅返回url的空值。 其他大多数帖子似乎都涉及getResourceAsSt