这是我想要实现的 - 一个看起来像这样的dist目录:
dist/
|-- application-1.0.jar
|-- resources/
|-- application.properties
|-- testing.config.xml
|-- training.config.xml
|-- ...
|-- lib/
|-- *.jar
也就是说,我想生成一个文件夹“dist”,它将包含我的application-1.0.jar,旁边有一个文件夹中的资源,所以我可以修改属性和配置文件,我也需要所有依赖项一个单独的文件夹(包括一些外部依赖项)
我在这里找到了一个类似的问题: https://stackoverflow.com/a/4201330/8317898
这很有帮助,但我遇到了一些问题:
1-当我试图将我的jar文件(带有其依赖项文件夹和资源)包含在另一个maven项目中时,我发现使用的资源是jar文件本身包含的资源,而不是分隔的资源。文件夹,这意味着我将无法修改属性和配置文件!我根本不想将资源包含在jar文件中! (默认情况下,它们被maven包括在内,因为我的资源是“src / main / resources”)。
2-我遇到了另一个问题,我的application.properties文件包含配置文件的路径(testing.config.xml,training.config.xml等),因为这些路径类似于“src / main / resources” /xxxx.config.xml“,我的新maven项目正在其”src / main / resources“文件夹中查找它们,而不是jar中包含的外部资源文件夹!
part of my application.properties file
这个问题是否导致我在原始代码中访问资源的方式? 我在原始项目中使用这种方式来访问application.properties资源:
InputStream resourceInputStream = ApplicationProperties.class.getResourceAsStream("/application.properties");
当我从属性文件加载属性时,我只使用程序中所需的路径(即文件f =新文件(ApplicationProperties.getProperty(“testing.config.xml”))
3-我的项目中有一些外部依赖项(以及从Internet下载的一些依赖项),我设法将所有deps包含在deps文件夹中。 (我将该回答问题中的distribution-zip.xml文件中的范围从“运行时”更改为“编译”以包括外部和互联网代码)
changed line 13 in distribution-zip.xml
但在我的新maven项目中,我无法访问外部jar,除非我将它们包含在新项目pom.xml中,这根本不实用! (我只能从互联网上访问罐子)
one of the external dependencies in pom.xml file with scope="system"
总之,我希望我的导出jar就像这样:a jar file for some tool from internet
当任何项目在其pom.xml文件中包含此jar文件时,可以使用它而不需要任何其他文件的额外引用(并且可以轻松修改资源文件夹中的属性和配置)。
请帮忙!