Spring-boot:run schlägt beim Abrufen von classpath*:/*.json fehl, wenn com.graphql-java-generator:graphql-java-client-ruJava

Java-Forum
Guest
 Spring-boot:run schlägt beim Abrufen von classpath*:/*.json fehl, wenn com.graphql-java-generator:graphql-java-client-ru

Post by Guest »

Ich habe eine Spring-Boot-Anwendung, die eine Reihe von JSON-Dateien aus dem Klassenpfad über classpath*:/*.json verarbeiten möchte.
Alles funktioniert gut, wenn ich die Anwendung starte:
  • in Eclipse
  • nach dem MVN-Clean-Paket durch java -jar ...
    Wenn ich mvn clean verwende spring-boot:run Die Anwendung schlägt fehl mit:

Code: Select all

java.util.zip.ZipException:  zip END header not found
at java.base/java.util.zip.ZipFile$Source.findEND(ZipFile.java:1649) ~[na:na]
at java.base/java.util.zip.ZipFile$Source.initCEN(ZipFile.java:1657) ~[na:na]
at java.base/java.util.zip.ZipFile$Source.(ZipFile.java:1495) ~[na:na]
at java.base/java.util.zip.ZipFile$Source.get(ZipFile.java:1458) ~[na:na]
at java.base/java.util.zip.ZipFile$CleanableResource.(ZipFile.java:724) ~[na:na]
at java.base/java.util.zip.ZipFile.(ZipFile.java:251) ~[na:na]
at java.base/java.util.zip.ZipFile.(ZipFile.java:180) ~[na:na]
at java.base/java.util.jar.JarFile.(JarFile.java:345) ~[na:na]
at java.base/sun.net.www.protocol.jar.URLJarFile.(URLJarFile.java:100) ~[na:na]
at java.base/sun.net.www.protocol.jar.URLJarFile.getJarFile(URLJarFile.java:69) ~[na:na]
at java.base/sun.net.www.protocol.jar.JarFileFactory.get(JarFileFactory.java:153) ~[na:na]
at java.base/sun.net.www.protocol.jar.JarURLConnection.connect(JarURLConnection.java:109) ~[na:na]
at java.base/sun.net.www.protocol.jar.JarURLConnection.getJarFile(JarURLConnection.java:70) ~[na:na]
at org.springframework.core.io.support.PathMatchingResourcePatternResolver.doFindPathMatchingJarResources(PathMatchingResourcePatternResolver.java:834) ~[spring-core-6.2.0.jar:6.2.0]
at org.springframework.core.io.support.PathMatchingResourcePatternResolver.findPathMatchingResources(PathMatchingResourcePatternResolver.java:710) ~[spring-core-6.2.0.jar:6.2.0]
at org.springframework.core.io.support.PathMatchingResourcePatternResolver.getResources(PathMatchingResourcePatternResolver.java:350) ~[spring-core-6.2.0.jar:6.2.0]
at org.springframework.context.support.AbstractApplicationContext.getResources(AbstractApplicationContext.java:1549) ~[spring-context-6.2.0.jar:6.2.0]
at org.springframework.context.support.GenericApplicationContext.getResources(GenericApplicationContext.java:263) ~[spring-context-6.2.0.jar:6.2.0]
at spring.classpatheval.demo.SpringClasspathWeirdness$ClasspathDemo.run(SpringClasspathWeirdness.java:32) ~[classes/:na]
at org.springframework.boot.SpringApplication.lambda$callRunner$5(SpringApplication.java:788) ~[spring-boot-3.4.0.jar:3.4.0]
at org.springframework.util.function.ThrowingConsumer$1.acceptWithException(ThrowingConsumer.java:82) ~[spring-core-6.2.0.jar:6.2.0]
at org.springframework.util.function.ThrowingConsumer.accept(ThrowingConsumer.java:60) ~[spring-core-6.2.0.jar:6.2.0]
at org.springframework.util.function.ThrowingConsumer$1.accept(ThrowingConsumer.java:86) ~[spring-core-6.2.0.jar:6.2.0]
at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:796) ~[spring-boot-3.4.0.jar:3.4.0]
at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:787) ~[spring-boot-3.4.0.jar:3.4.0]
at org.springframework.boot.SpringApplication.lambda$callRunners$3(SpringApplication.java:772) ~[spring-boot-3.4.0.jar:3.4.0]
at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184) ~[na:na]
at java.base/java.util.stream.SortedOps$SizedRefSortingSink.end(SortedOps.java:357) ~[na:na]
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:510) ~[na:na]
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) ~[na:na]
at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151) ~[na:na]
at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174) ~[na:na]
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[na:na]
at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) ~[na:na]
at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:772) ~[spring-boot-3.4.0.jar:3.4.0]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:325) ~[spring-boot-3.4.0.jar:3.4.0]
at spring.classpatheval.demo.SpringClasspathWeirdness.main(SpringClasspathWeirdness.java:19)  ~[classes/:na]

Das Programm:

Code: Select all

package spring.classpatheval.demo;

import java.io.IOException;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.ResourcePatternResolver;

public class SpringClasspathWeirdness {
@SuppressWarnings("resource")
public static void main(String[] args) {
final SpringApplication toRun = new SpringApplication(ClasspathDemo.class);
toRun.run(args);
}

@SpringBootApplication
public static class ClasspathDemo implements CommandLineRunner {

private static final Logger log = LoggerFactory.getLogger(SpringClasspathWeirdness.ClasspathDemo.class);
@Autowired
private ResourcePatternResolver resourceLoader;
@Override
public void run(String...  args) throws Exception {
final Resource[] gitFiles;
try {
gitFiles = resourceLoader.getResources("classpath*:/*.json");
} catch (IOException e) {
log.error("on getting git information from classpath", e);
return;
}
for (Resource r : gitFiles) {
System.err.println(r.getFilename());
}
System.exit(0);
}

}
}

Code: Select all

pom.xml
:

Code: Select all

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0

org.springframework.boot
spring-boot-starter-parent
3.4.0
  

spring.classpatheval
democlasspath
0.0.1-SNAPSHOT
Demo Application
Demo project for Spring Boot Application Info

21
spring.classpatheval.demo.SpringClasspathWeirdness



com.graphql-java-generator
graphql-java-client-runtime
2.8


com.graphql-java-generator
graphql-java-client-dependencies


com.graphql-java-generator
graphql-java-common-runtime




org.springframework.boot
spring-boot-starter-actuator


org.springframework.boot
spring-boot-starter-graphql


org.springframework.boot
spring-boot-starter-web



org.springframework.boot
spring-boot-starter-test
test


org.springframework
spring-webflux
test


org.springframework.graphql
spring-graphql-test
test






org.springframework.boot
spring-boot-maven-plugin


org.apache.maven.plugins
maven-source-plugin


attach-sources
package

jar-no-fork








Ich erwarte, dass das Verhalten von mvn spring-boot:run und mvn package identisch ist.
Das habe ich getan Grenzen Sie das Problem auf die Abhängigkeit ein

Code: Select all

        
com.graphql-java-generator
graphql-java-client-runtime
2.8

Wenn ich die folgenden Abhängigkeiten von com.graphql-java-generator:graphql-java-client-runtime ausschließe, erhalte ich die Fehlermeldung nicht, aber meine Anwendung funktioniert nicht (aufgrund fehlender Abhängigkeiten). Wenn ich diese nicht auf Abhängigkeiten ausschließe, funktioniert meine Anwendung danach nur noch mit mvn clean package und java -jar ....

Code: Select all

            

com.graphql-java-generator
graphql-java-client-dependencies


com.graphql-java-generator
graphql-java-common-runtime


Das gleiche Verhalten tritt auf, wenn ein Feld mit der Annotation @Value("classpath*:/*.json") deklariert wird statt ResourcePatternResolver automatisch zu verknüpfen:

Code: Select all

@Value("classpath*:/git-*.json")
private Resource[] gitFiles;

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post