我正在使用带有配置文件的maven程序集插件生成一个包含应用程序结构的zip文件,并保证路径正确:
<profiles>
<profile>
<id>desenvolvimento</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<arquivo_tef4j>classpath:tef4j.properties</arquivo_tef4j>
<arquivo_bd>classpath:bancoDados.properties</arquivo_bd>
<arquivo_aplicacao>classpath:aplicacao.properties</arquivo_aplicacao>
<modelo_dav>classpath:modelos_relatorio/dav.rptdesign</modelo_dav>
</properties>
</profile>
<profile>
<id>producao</id>
<properties>
<arquivo_tef4j>file:../config/tef4j.properties</arquivo_tef4j>
<arquivo_bd>file:../config/bancoDados.properties</arquivo_bd>
<arquivo_aplicacao>file:../config/aplicacao.properties</arquivo_aplicacao>
<modelo_dav>file:../modelos/dav.rptdesign</modelo_dav>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<finalName>${project.artifactId}</finalName>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>../lib/</classpathPrefix>
<mainClass>com.hrgi.pdv.App</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptors>
<descriptor>src/main/assembly/assembly.xml</descriptor>
</descriptors>
<archive>
<manifest>
<mainClass>com.hrgi.pdv.App</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
名为“desenvolvimento”的配置文件用于IDE的开发,另一个配置文件用于生成生产的zip文件。如您所见,配置文件中的差异基本上是属性值。当我使用“desenvolvimento”配置文件时,它们运行良好,但我在第二个配置文件中遇到了“modelo_dav”属性的问题。 此属性用于“aplicacao.properties”,但程序集插件复制“aplicacao.properties”而不更改属性$ {modelo_dav},如果我打开jar文件,“aplicacao.properties”文件具有正确的值,所以我假设在maven更改属性之前,程序集插件正在复制文件。 有没有办法在maven更改属性后强制组装插件复制文件?另一个问题是:如何从最终的jar文件中删除属性文件?
答案 0 :(得分:0)
您的程序集在package
阶段运行,该阶段与jar相同,并且位于process-resources
阶段之后,这是处理过滤的阶段,至少在默认情况下是这样。所以,这表明它不是一个排序问题。
我建议您仔细检查并进行某种测试,以确定程序集从哪里获取文件。它可以直接从未处理的源端抓取,而不是目标。
答案 1 :(得分:0)
您可以做的是从构建目录而不是源目录制作程序集插件复制资源文件,如下所示: 变化
<fileSet>
<directory>${project.basedir}/src/main/resources</directory>
<outputDirectory>conf</outputDirectory>
<includes>
<include>*.properties</include>
</includes>
</fileSet>
到
<fileSet>
<directory>${project.build.directory}/classes</directory>
<outputDirectory>conf</outputDirectory>
<includes>
<include>*.properties</include>
</includes>
</fileSet>