【发布时间】:2019-04-30 06:01:47
【问题描述】:
我有一个读取资源.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 中运行良好。现在我想构建一个包含所有资源的可执行 uber 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 中。当我执行jar tf myapplication-0.0.1-SNAPSHOT.jar 时,我可以看到jar 里面有文件config.yaml。但是,当我尝试使用 java -jar 运行它时,我收到 java.io.FileNotFoundException 并显示无法找到 config.yaml 的消息。
【问题讨论】:
标签: java maven jar executable-jar maven-shade-plugin