У меня есть простой проект, который читает файл ресурса .yaml
:
var yamlObjectMapper = new ObjectMapper(new YAMLFactory());
var classLoader = Application.class.getClassLoader();
var file = new File(Objects.requireNonNull(classLoader.getResource("config.yaml")).getFile());
var appConfig = yamlObjectMapper.readValue(file, ApplicationConfig.class);
Так что он отлично работает из IDE.Теперь я хочу создать исполняемый UAR JAR, который будет включать все ресурсы внутри.Я использую maven-shade-plugin
.
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<minimizeJar>true</minimizeJar>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>mypackage.Application</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
Так что я ожидаю, что файлы ресурсов будут включены в банку.И когда я выполняю jar tf myapplication-0.0.1-SNAPSHOT.jar
, я вижу, что внутри банки есть файл config.yaml
.Однако, когда я пытаюсь запустить его с java -jar
, я получаю java.io.FileNotFoundException
с сообщением, что config.yaml
не может быть найден.