我正在开发我的第一个Maven项目,该项目最终将在Debian软件包中打包Java应用程序(使用jdeb插件)。我试图使用程序集插件来构建tar文件,但看起来生成的文件并不总是包含目录条目,这将导致dpkg安装失败。
有没有人见过这个?
具体而言,生成的tar文件不包含以下目录条目:
<includes>
的文件集(离开<includes>
将导致tar文件中的目录条目)这是一个不使用<includes>
<assembly
xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
<id>simple</id>
<formats>
<format>tar</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<moduleSets>
</moduleSets>
<fileSets>
<fileSet>
<directory>src/main/config</directory>
<outputDirectory>/etc/${project.artifactId}</outputDirectory>
</fileSet>
</fileSets>
<dependencySets>
<dependencySet>
<outputDirectory>/usr/lib/${project.artifactId}/lib</outputDirectory>
<scope>runtime</scope>
<useProjectArtifact>true</useProjectArtifact>
</dependencySet>
</dependencySets>
<repositories>
</repositories>
<componentDescriptors />
</assembly>
以下是tar文件的内容:
tar tvf assembly-test-0.0.1-SNAPSHOT-simple.tar
drwxr-xr-x 0/0 0 2012-04-10 12:54 etc/assembly-test/
-rw-r--r-- 0/0 0 2012-04-10 12:52 etc/assembly-test/file1.xml
-rw-r--r-- 0/0 0 2012-04-10 12:52 etc/assembly-test/file2.xml
-rw-r--r-- 0/0 2131 2012-04-10 13:26 usr/lib/assembly-test/lib/assembly-test-0.0.1-SNAPSHOT.jar
现在,如果我使用包含某些包含模式的程序集:
<assembly
xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
<id>include-match</id>
<formats>
<format>tar</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<moduleSets>
</moduleSets>
<fileSets>
<fileSet>
<directory>src/main/config</directory>
<outputDirectory>/etc/${project.artifactId}</outputDirectory>
<includes>
<include>*.xml</include>
</includes>
</fileSet>
</fileSets>
<dependencySets>
<dependencySet>
<outputDirectory>/usr/lib/${project.artifactId}/lib</outputDirectory>
<scope>runtime</scope>
<useProjectArtifact>true</useProjectArtifact>
</dependencySet>
</dependencySets>
<repositories>
</repositories>
<componentDescriptors />
</assembly>
tar文件的内容丢失了目录条目:
tar tvf assembly-test-0.0.1-SNAPSHOT-include-match.tar
-rw-r--r-- 0/0 0 2012-04-10 12:52 etc/assembly-test/file1.xml
-rw-r--r-- 0/0 0 2012-04-10 12:52 etc/assembly-test/file2.xml
-rw-r--r-- 0/0 2131 2012-04-10 13:26 usr/lib/assembly-test/lib/assembly-test-0.0.1-SNAPSHOT.jar
这似乎是程序集插件中的一个错误,尽管我还在尝试它。我当然可以解决它(在包中使用preinst脚本,可能构建一个jdeb的目录结构来构建),但是我喜欢在描述符文件中保留尽可能多的内容。
答案 0 :(得分:0)
想想我可以通过一种方法来解决这个问题,这种方法可以强制在tar文件中创建目录条目(我实际上在其他地方找到了这个,但是不记得在哪里) - 添加文件集同时排除所有内容,例如:
<!-- force entry for /usr/lib/${project.artifactId} -->
<fileSet>
<directory></directory>
<outputDirectory>/usr/lib/${project.artifactId}</outputDirectory>
<excludes>
<exclude>*/**</exclude>
</excludes>
</fileSet>
不优雅,如果你有很多目录就会变得冗长,但它有效。但是对于我创建debian包的具体情况,我最终使用Assembly插件来构建一个“目录”格式程序集,然后让jdeb插件使用目录结构(并设置文件模式),最后得到了一些总体上更简单。
答案 1 :(得分:0)
有一种解决此问题的简单方法,只需包含您想要的目录或&#34; ** /&#34;如果你想要所有这些,例如:
<include>mydir/**/</include>
请注意尾随/作为拉入目录的东西。我认为当前的行为可能是有意的,因为包含似乎准确地包含了你所包含的内容而没有其他内容。顺便说一句,虽然由此产生的tarball不满足npm,所以maven的支持似乎仍然有点怀疑。