0

在 spring-boot + jersey 应用程序中调用 ResourceConfig.packages("...") 会导致 BOOT-INF/classes 的 java.io.FileNotFoundException,尽管该目录在 jar 文件中。

这是我的 ResourceConfig 子类:

@Configuration
public class JerseyConfig extends ResourceConfig {

    public JerseyConfig() {
        packages("com.example.api");
        property(ServletProperties.FILTER_FORWARD_ON_404, true);
        ...
    }
}

我在启动时遇到的例外是

Caused by: org.glassfish.jersey.server.internal.scanning.ResourceFinderException: java.io.FileNotFoundException: /Users/me/my-project/target/my-project-1.0.0.jar!/BOOT-INF/classes (No such file or directory)
    at org.glassfish.jersey.server.internal.scanning.JarZipSchemeResourceFinderFactory.create(JarZipSchemeResourceFinderFactory.java:66) ~[jersey-server-2.33.jar!/:na]
    at org.glassfish.jersey.server.internal.scanning.JarZipSchemeResourceFinderFactory.create(JarZipSchemeResourceFinderFactory.java:42) ~[jersey-server-2.33.jar!/:na]
    at org.glassfish.jersey.server.internal.scanning.PackageNamesScanner.addResourceFinder(PackageNamesScanner.java:264) ~[jersey-server-2.33.jar!/:na]
    at org.glassfish.jersey.server.internal.scanning.PackageNamesScanner.init(PackageNamesScanner.java:180) ~[jersey-server-2.33.jar!/:na]
    at org.glassfish.jersey.server.internal.scanning.PackageNamesScanner.<init>(PackageNamesScanner.java:132) ~[jersey-server-2.33.jar!/:na]
    at org.glassfish.jersey.server.internal.scanning.PackageNamesScanner.<init>(PackageNamesScanner.java:88) ~[jersey-server-2.33.jar!/:na]
    at org.glassfish.jersey.server.ResourceConfig.packages(ResourceConfig.java:655) ~[jersey-server-2.33.jar!/:na]
    at org.glassfish.jersey.server.ResourceConfig.packages(ResourceConfig.java:635) ~[jersey-server-2.33.jar!/:na]
    at com.example.config.JerseyConfig.<init>(JerseyConfig.java:25) ~[classes!/:1.0.0]
...

jar -tvf my-project-1.0.0.jar如果我用那个目录查看那个 jar 文件就在BOOT-INF/classes那里。

4

0 回答 0