在Maven JAR包中包含文件

7

我有一个Maven项目,其结构如下:

project

-src
--main
---java
----(All my .java files are here in their packages)
---resource
----(All my resources are here)

-database (HSQLDB files)
--db.script
--db.properties
--db.data

-target
--Maven build directory

pom.xml

我希望maven jar插件在构建JAR文件时将其打包到数据库文件夹中。我已尝试按照此处所述的方式进行包含:https://maven.apache.org/plugins/maven-jar-plugin/examples/include-exclude.html,但它无法找到目录“../database”(或../../database或../../../database!),而且现在它也不包括任何类或资源(以前它是包括它们的)。
那么,在maven jar插件的配置中应该包含什么?正确的路径是什么,如何保留以前包括的文件?
谢谢
1个回答

13

默认情况下,只有位于 src/main/resources 目录下的资源文件会被添加到生成的 JAR 包中。


你尝试通过配置 maven-jar-plugin 来定义仅包含或排除在构建 JAR 包时的文件集合。


但这些文件仍然必须位于 Maven 搜索资源的资源目录下。


因此,你有两种解决方案:

  • database 移动到标准目录:src/main/resources 中。

  • 为资源指定两个 resource 文件夹:

要执行后者,在 pom.xml 的 build 标签中添加以下内容:

<resources>
     <resource>
       <directory>src/main/resources</directory>          
     </resource>
     <resource>
       <directory>database-resources</directory>
     </resource>
</resources>

然后将您想要打包放在 database-resources 内的 database 文件夹添加进去。


1
谢谢这个,有没有办法将它保存在一个文件夹里? - Duane Allman
这是一个奇怪的事情,连接到HSQLDB时我需要绝对指定项目文件夹中的文件路径。这很烦人。因此,在JAR包中打包数据库时,数据库的文件夹结构需要保持不变。 - Duane Allman
看,连接到HSQLDB的奇怪之处在于我需要绝对指定项目文件夹中的文件路径。这感觉像是需要改进的事情。使用Maven将文件夹放置在此位置是可能的,但这不是标准方式,而且也很棘手。建议:尝试解决连接到HSQLDB时的位置问题。如果您无法解决,请在SO上提出新问题。 - davidxxx
那么肯定没有办法从根目录添加吗? - Duane Allman
1
我不建议这样做,但你可以使用copy-resources目标。请参考:https://maven.apache.org/plugins/maven-resources-plugin/examples/copy-resources.html - davidxxx

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接