有一个maven模块,比如prj-package-module,使用maven-assembly-plugin将项目工件打包到tar文件中。在prj-package-module / pom.xml中还添加了jar作为依赖项,并打包到tar文件中。
现在要求在打包到tar文件之前将文件prj-pakacge-module / src / main / resources / file.xml添加到其中一个依赖项jar中。我怎样才能做到这一点?
编辑:该文件是一个JNLP,其中包含动态添加的依赖项jar列表。出于安全原因,Javaws还要求在JNLP文件中添加jar和要签名的jar。这就是我遇到问题的地方。
答案 0 :(得分:3)
这是一个maven解决方案,可以动态解压现有的依赖项,将资源添加(复制)到解压缩的文件夹,重新打包(jar)这个洞,并因此获得初始jar的修改后的副本。
示例pom文件正是为junit
依赖项执行的操作:
<build>
<plugins>
<!-- unpack step -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.10</version>
<executions>
<execution>
<id>unpack</id>
<phase>prepare-package</phase>
<goals>
<goal>unpack</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<type>jar</type>
<outputDirectory>${project.build.directory}/unpack-tmp</outputDirectory>
<includes>**/*.class,**/*.xml</includes>
</artifactItem>
</artifactItems>
</configuration>
</execution>
</executions>
</plugin>
<!-- add the additional resource step -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>2.7</version>
<executions>
<execution>
<id>copy-resources</id>
<phase>prepare-package</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${basedir}/target/unpack-tmp</outputDirectory>
<resources>
<resource>
<directory>src/main/resources</directory>
<include>test.properties</include>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
<!-- repack step -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<id>repack</id>
<phase>prepare-package</phase>
<goals>
<goal>jar</goal>
</goals>
<configuration>
<classesDirectory>${basedir}/target/unpack-tmp</classesDirectory>
<finalName>junit-modified</finalName>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
它实际上在做什么:
prepare-package
phase的一部分,我们添加了三个步骤来从依赖项创建修改后的jar 运行上面的示例,junit-modified.jar
文件将显示在maven项目的target
文件夹中。
上述插件配置的顺序对于将步骤流视为同一阶段的一部分非常重要。
然后,你有一个额外的文件要添加到你的胖罐子里,这确实是你可能正在寻找的改良罐子。
如果您不需要动态方法,更好的方法是执行一次并拥有该依赖关系的分类版本,如this other SO post中所述。
或者,将其移至Maven profile,以便至少它不是默认构建的一部分。
答案 1 :(得分:0)
在将其打包到项目的最终工件之前,您似乎正在尝试修改maven项目的依赖项。 这很狡猾。如果那个jar /库(依赖项)是你的,那么修改那个jar的pom,重建它,然后让当前项目解析最新的工件。
如果,依赖jar不是你的,那么在当前项目(你正在构建的那个)中拥有资源(prj-pakacge-module / src / main / resources / file.xml)就足够了现在),因为最终结果将是相同的(只要程序集插件设置为展平目标超级/脂肪罐中的所有神器罐...