Java 正在从资源读取文件-路径必须存在:/app/app.jar/BOOT-INF/classes/特征/

Java 正在从资源读取文件-路径必须存在:/app/app.jar/BOOT-INF/classes/特征/,java,resources,classpath,Java,Resources,Classpath,我需要一个文件的类路径。我找到了使用类路径获取路径的方法 String filePath = com.google.common.io.Resources.getResource(feature).getFile(); String filePath = >com.google.common.io.Resources.getResource(feature).getFile(); 我在服务器上部署了我的应用程序。使用cucumber执行代码时,出现了此错误 path must exis

我需要一个文件的类路径。我找到了使用类路径获取路径的方法

String filePath = com.google.common.io.Resources.getResource(feature).getFile();
String filePath = >com.google.common.io.Resources.getResource(feature).getFile();
我在服务器上部署了我的应用程序。使用cucumber执行代码时,出现了此错误

path must exist: /app/app.jar!/BOOT-INF/classes!/features/attachment/heal.feature
path must exist: /app/app.jar!/BOOT-INF/classes!/features/attachment/heal.feature
我检查了
app.jar
内的
target
文件夹,无法提取和查看内容

我使用的是
Spring boot 2
,这是
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>pmc.aop.core</groupId>
<artifactId>pmc-integration-tests</artifactId>
<version>0.1.5-${BUILD_NUMBER}</version>
<packaging>jar</packaging>


<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.2.1.RELEASE</version>
</parent>

<properties>
    <java.version>11</java.version>
    <spring-cloud.version>Hoxton.RELEASE</spring-cloud.version>
    <spring-boot.version>2.2.1.RELEASE</spring-boot.version>
    <drools.version>7.35.0.Final</drools.version>
    <kie.version>7.35.0.Final</kie.version>
    <lombok.version>1.16.22</lombok.version>
    <cucumber-version>5.7.0</cucumber-version>
</properties>

<dependencies>

    <dependency>
        <groupId>pnc.aop.core</groupId>
        <artifactId>aop-lib-kafka-crypto</artifactId>
        <version>0.4.0-1</version>
    </dependency>

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-stream-binder-kafka</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-stream</artifactId>
    </dependency>

    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
        <version>3.10</version>
    </dependency>

    <dependency>
        <groupId>org.mongodb</groupId>
        <artifactId>mongo-java-driver</artifactId>
        <version>3.12.4</version>
    </dependency>


    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>

    <dependency>
        <groupId>io.cucumber</groupId>
        <artifactId>cucumber-java</artifactId>
        <version>${cucumber-version}</version>
    </dependency>

    <dependency>
        <groupId>io.cucumber</groupId>
        <artifactId>cucumber-junit</artifactId>
        <version>${cucumber-version}</version>
    </dependency>

    <dependency>
        <groupId>io.cucumber</groupId>
        <artifactId>cucumber-spring</artifactId>
        <version>${cucumber-version}</version>
    </dependency>

    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>

</dependencies>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${spring-cloud.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<build>

    <finalName>app</finalName>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>${spring-boot.version}</version>
            <configuration>
                <executable>true</executable>
            </configuration>
        </plugin>

        <plugin>
            <groupId>org.jfrog.buildinfo</groupId>
            <artifactId>artifactory-maven-plugin</artifactId>
            <version>2.6.1</version>
        </plugin>

        <plugin>
            <groupId>org.jacoco</groupId>
            <artifactId>jacoco-maven-plugin</artifactId>
            <version>0.8.5</version>
            <configuration>

            </configuration>
            <executions>
                <execution>
                    <id>prepare-agent</id>
                    <goals>
                        <goal>prepare-agent</goal>
                    </goals>
                </execution>
                <execution>
                    <id>report</id>
                    <phase>prepare-package</phase>
                    <goals>
                        <goal>report</goal>
                    </goals>
                </execution>
                <execution>
                    <id>post-unit-test</id>
                    <phase>test</phase>
                    <goals>
                        <goal>report</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.6.0</version>
            <configuration>
                <source>${java.version}</source>
                <target>${java.version}</target>

                <annotationProcessorPaths>
                    <path>
                        <groupId>org.projectlombok</groupId>
                        <artifactId>lombok</artifactId>
                        <version>${lombok.version}</version>
                    </path>
                </annotationProcessorPaths>

            </configuration>
        </plugin>
        <plugin>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.22.2</version>
        </plugin>


    </plugins>

</build>

4.0.0
pmc.aop.core
pmc集成测试
0.1.5-${BUILD_NUMBER}
罐子
org.springframework.boot
spring启动程序父级
2.2.1.发布
11
霍克斯顿释放
2.2.1.发布
7.35.0.1决赛
7.35.0.1决赛
1.16.22
5.7.0
pnc.aop.core
自由卡夫卡密码
0.4.0-1
org.springframework.cloud
春天的云流活页夹卡夫卡
org.springframework.cloud
春云流
org.apache.commons
commons-lang3
3.10
org.mongodb
mongo java驱动程序
3.12.4
org.springframework.boot
SpringBootStarterWeb
org.springframework.boot
弹簧起动试验
org.springframework.boot
弹簧靴起动器执行器
黄瓜
黄瓜爪哇
${cumber version}
黄瓜
黄瓜刺柏
${cumber version}
黄瓜
黄瓜之春
${cumber version}
org.projectlombok
龙目
真的
org.springframework.cloud
spring云依赖关系
${spring cloud.version}
聚甲醛
进口
应用程序
org.springframework.boot
springbootmaven插件
${spring boot.version}
真的
org.jfrog.buildinfo
人工maven插件
2.6.1
org.jacoco
jacocomaven插件
0.8.5
配制剂
配制剂
报告
准备包装
报告
单元后测试
测试
报告
org.apache.maven.plugins
maven编译器插件
3.6.0
${java.version}
${java.version}
org.projectlombok
龙目
${lombok.version}
maven surefire插件
2.22.2

看起来罐子坏了

我需要一个文件的类路径。我找到了使用类路径获取路径的方法

String filePath = com.google.common.io.Resources.getResource(feature).getFile();
String filePath = >com.google.common.io.Resources.getResource(feature).getFile();
我在服务器上部署了我的应用程序。使用cucumber执行代码时,出现了此错误

path must exist: /app/app.jar!/BOOT-INF/classes!/features/attachment/heal.feature
path must exist: /app/app.jar!/BOOT-INF/classes!/features/attachment/heal.feature
文件路径与类路径不同。如果查看,您将看到与常规jar文件不同的布局:

example.jar
 |
 +-META-INF
 |  +-MANIFEST.MF
 +-org
 |  +-springframework
 |     +-boot
 |        +-loader
 |           +-<spring boot loader classes>
 +-BOOT-INF
    +-classes
    |  +-mycompany
    |     +-project
    |        +-YourClasses.class
    +-lib
       +-dependency1.jar
       +-dependency2.jar
example.jar
|
+-META-INF
|+-MANIFEST.MF
+-组织机构
|+-springframework
|+引导
|加载器
|           +-
+-BOOT-INF
+-班级
|+-mycompany
|+-项目
|+-YourClasses.class
+-解放党
+-依赖关系1.jar
+-依赖性2.jar
BOOT-INF/classes
BOOT-INF/lib
的内容位于类路径上。因此您可以使用
classpath:features/attachment/heal.feature
作为功能路径


请注意,黄瓜只有两种颜色

您不使用
文件
获取类路径资源。在春季,您可以简单地直接注入一个
资源
甚至是一个
InputStream
对象,框架将负责为您解析和连接资源。@chrylis小心优化-任何示例?使用
resourceLoader.getResource(“类路径:“+功能”).getURI().getPath()
获取
“features/local/notify.feature”
和cucumber一起工作。但是在我的服务器上我得到了
[null]
我猜你没有把文件放在
jar
@chrylis谨慎的Optimistic你想把它再次变成
文件
;这在jar中不起作用。总是直接使用
输入流
获取资源。