Java 如何处理打包到jar的maven项目中的资源路径

Java 如何处理打包到jar的maven项目中的资源路径,java,eclipse,maven,jar,resources,Java,Eclipse,Maven,Jar,Resources,我对打包到jar文件中的Maven项目(在Windows+EclipseIDE平台上)的资源管理有问题。我不知道如何处理到资源的路径 我的资源位于/src/main/resources/文件夹中 My pom.xml: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://mav

我对打包到jar文件中的Maven项目(在Windows+EclipseIDE平台上)的资源管理有问题。我不知道如何处理到资源的路径

我的资源位于/src/main/resources/文件夹中

My pom.xml:

<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>example.com</groupId>
  <artifactId>uploader</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>uploader</name>
  <url>http://maven.apache.org</url>

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

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <build>
      <resources>
          <resource>
              <directory>src/main/resources</directory>
              <includes>
                  <include>clientconfig.xml</include>
                  <include>pause.png</include>
                  <include>resume.png</include>
                  <include>serverconfig.xml</include>
                  <include>stop.png</include>
              </includes>
              <!-- relative to target/classes
                   i.e. ${project.build.outputDirectory} -->
              <targetPath>..</targetPath>
          </resource>
      </resources>
  </build>

</project>
正如我在导出文件正确存储到根jar文件存档后看到的,但当我尝试从控制台调用程序时,我得到:

java.io.FileNotFoundException: C:\Users\lenovo\Desktop\jar:file:\C:\Users\lenovo
\Desktop\uploader.jar!\clientconfig.xml (Nazwa pliku, nazwa katalogu lub sk│adni
a etykiety woluminu jest niepoprawna)
        at java.io.FileInputStream.open(Native Method)
        at java.io.FileInputStream.<init>(Unknown Source)
        at java.io.FileInputStream.<init>(Unknown Source)
        at sun.net.www.protocol.file.FileURLConnection.connect(Unknown Source)
        at sun.net.www.protocol.file.FileURLConnection.getInputStream(Unknown So
urce)
        at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrent
Entity(Unknown Source)
        at com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineD
ocVersion(Unknown Source)
        at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(U
nknown Source)
        at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(U
nknown Source)
        at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown So
urce)
        at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(Unknown So
urce)
        at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(Unk
nown Source)
        at javax.xml.parsers.DocumentBuilder.parse(Unknown Source)
        at example.com.uploader.config.UploaderConfig.<init>(UploaderConfig.j
ava:110)
        at example.com.uploader.client.Client.readConfiguration(Client.java:2
00)
        at example.com.uploader.client.Client.main(Client.java:222)
example.com.uploader.config.ConfigException
        at example.com.uploader.config.UploaderConfig.<init>(UploaderConfig.j
ava:119)
        at example.comt.uploader.client.Client.readConfiguration(Client.java:2
00)
        at example.com.uploader.client.Client.main(Client.java:222)
java.io.FileNotFoundException:C:\Users\lenovo\Desktop\jar:file:\C:\Users\lenovo
\Desktop\uploader.jar\clientconfig.xml(Nazwa pliku、Nazwa katalogu lub sk│阿德尼
一个易听的笑话(niepoprawna)
在java.io.FileInputStream.open(本机方法)
位于java.io.FileInputStream。(未知源)
位于java.io.FileInputStream。(未知源)
位于sun.net.www.protocol.file.FileURLConnection.connect(未知源)
位于sun.net.www.protocol.file.FileURLConnection.getInputStream(未知So
(资源)
在com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrent上
实体(未知源)
在com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.com上
OCV版本(未知源)
在com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(U
(不知道来源)
在com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(U
(不知道来源)
请访问com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(目前未知)
(资源)
在com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(未知
(资源)
在com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(Unk
未知来源)
位于javax.xml.parsers.DocumentBuilder.parse(未知源)
在example.com.uploader.config.UploaderConfig.(UploaderConfig.j
艾娃:110)
在example.com.uploader.client.client.readConfiguration(client.java:2
00)
位于example.com.uploader.client.client.main(client.java:222)
example.com.uploader.config.ConfigException
在example.com.uploader.config.UploaderConfig.(UploaderConfig.j
ava:119)
例如.comt.uploader.client.client.readConfiguration(client.java:2
00)
位于example.com.uploader.client.client.main(client.java:222)
(关于波兰语注释和换行很抱歉,但我是用波兰语系统编译的)

这不仅是关于这种特殊情况的问题,而且是关于如何在打包到jar文件的maven项目中正确地存储和处理资源文件的问题。

刚刚实现

当您的配置在jar中时,您不能使用
新文件
——该文件不存在


使用
YourClass.class.getResourceAsStream(“/clientconfig.xml”)
并从流中读取它。

而不是“clientconfig.xml”,尝试使用“/clientconfig.xml”无效。getSystemSource返回null,这意味着java找不到文件。请看操作系统是Windows,所以路径分隔符是“\\”。路径分隔符/是可移植的-适用于所有操作系统。请尝试YourClass.class.getResource(“/clientconfig.xml”),仍然存在相同的错误。我检查了文件clientconfig.xml的存档,以确保该文件位于根文件夹中。java.io.FileNotFoundException:C:\Users\lenovo\Desktop\jar:file:\C:\Users\lenovo\Desktop\uploader.jar\clientconfig.xml
java.io.FileNotFoundException: C:\Users\lenovo\Desktop\jar:file:\C:\Users\lenovo
\Desktop\uploader.jar!\clientconfig.xml (Nazwa pliku, nazwa katalogu lub sk│adni
a etykiety woluminu jest niepoprawna)
        at java.io.FileInputStream.open(Native Method)
        at java.io.FileInputStream.<init>(Unknown Source)
        at java.io.FileInputStream.<init>(Unknown Source)
        at sun.net.www.protocol.file.FileURLConnection.connect(Unknown Source)
        at sun.net.www.protocol.file.FileURLConnection.getInputStream(Unknown So
urce)
        at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrent
Entity(Unknown Source)
        at com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineD
ocVersion(Unknown Source)
        at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(U
nknown Source)
        at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(U
nknown Source)
        at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown So
urce)
        at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(Unknown So
urce)
        at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(Unk
nown Source)
        at javax.xml.parsers.DocumentBuilder.parse(Unknown Source)
        at example.com.uploader.config.UploaderConfig.<init>(UploaderConfig.j
ava:110)
        at example.com.uploader.client.Client.readConfiguration(Client.java:2
00)
        at example.com.uploader.client.Client.main(Client.java:222)
example.com.uploader.config.ConfigException
        at example.com.uploader.config.UploaderConfig.<init>(UploaderConfig.j
ava:119)
        at example.comt.uploader.client.Client.readConfiguration(Client.java:2
00)
        at example.com.uploader.client.Client.main(Client.java:222)