gpt4 book ai didi

java - getResource() 没有在类路径上定位资源

转载 作者:行者123 更新时间:2023-11-30 11:37:05 29 4
gpt4 key购买 nike

我已经在 java SE 中设置了基本的 maven 项目,其中包含一个资源:

main 
-java
-resources
-config -> database.properties

现在因为我不想在最终的 jar 中使用这个资源,所以我定义:

 <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<excludes>
<exclude>config/database.properties</exclude>
</excludes>
</configuration>
<executions>
<execution>
<id>make-jar-ultimateParser</id>
<phase>package</phase>
<goals>
<goal>jar</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/dist</outputDirectory>
<finalName>testApp</finalName>
<archive>
<compress>false</compress>
<!-- Manifest - MainClass & ClassPath -->
<manifest>
<mainClass>aa.bb.Class</mainClass>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
</manifest>
<manifestEntries>
<Class-Path>config/database.properties</Class-Path>
</manifestEntries>
</archive>
</configuration>
</execution>
</executions>
</plugin>
<!-- Copy configuration files -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<id>copy-resources</id>
<phase>validate</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/dist/config</outputDirectory>
<resources>
<resource>
<directory>src/main/resources/config</directory>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.0</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
</plugins>
</build>

因此资源位于类路径中,并且包含资源的目录被复制到最终的 jar 中。

我的 list 看起来像这样:“Class-Path: config/database.properties”

但我无法阅读它:

String db = "/config/database.properties";
properties = new Properties();
properties.load(getClass().getResourceAsStream(db));

我尝试了绝对/相对路径,getClass()/ClassLoader。没有什么。它在 NetBeans 中完美运行,仅此而已。

最佳答案

您误解了 Maven 资源插件的作用。它只是将资源(可能带有转换)复制到构建输出目录中。然后将它们包含到构建 Artifact (JAR、WAR 等)中。

要使其正常工作(使用 Class-Path list 条目引用 JAR 的目录),您需要单独分发配置文件。或者使用 File 引用它,而不用担心类路径。

更好的方法是将您的应用程序作为程序集分发,其中包含核心应用程序、任何依赖项和配置文件。这通常会打包为一个 ZIP 文件,用户会解压缩以进行安装。

关于java - getResource() 没有在类路径上定位资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14203138/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com