好的,所以我有一个多模块的Web项目(Spring,Hibernate和所有这些),由WAR和3个JAR组成。其中2个JAR是核心WAR和JAR的可选扩展。扩展名由maven配置文件使用,它们将它们添加为依赖关系。一切正常。
然而,当在Tomcat服务器上安装项目时,我注意到我无法编辑扩展模块的属性文件,因为它们打包在JAR文件中。因此,当我使用maven打包我的项目时,我正在寻找一种方法将我的属性文件从我的扩展JAR移动到我的可部署WAR的资源文件夹。这意味着当激活扩展时,资源将仅位于WEB资源文件夹中。
我怎样才能做到最好?
修改-01
好的,所以我尝试使用qza建议的build-helper-maven-plugin。
试战POM:<project>
...
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.1.1</version>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.8</version>
<executions>
<execution>
<id>add-resource</id>
<phase>process-resources</phase>
<goals>
<goal>add-resource</goal>
</goals>
<configuration>
<resources>
<resource>
<directory>../extTestA-jar/src/main/resources</directory>
<targetPath>resources</targetPath>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
我的项目布局如下:
<Parent>
--><extTestA-jar>
--><extTestB-jar>
--><test-jar>
--><test-war>
我的资源位于“src / main / resources”
有人能发现这个问题吗?我已尝试使用和不使用targetPath但似乎没有工作。我也尝试在generate-resources阶段做到但仍然没有运气。我认为这条路可能是错的,所以我尝试了其他一些但仍然没有运气。
答案 0 :(得分:1)
最好从项目外部读取属性。为应用程序服务器创建配置文件夹,并在服务器启动脚本中定义它,例如:
-Dconfiguration.dir=/etc/tomcatConf
然后将配置文件/文件夹放在该文件夹下,并使用spring属性占位符bean扫描它们:
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>file:${configuration.dir}/module1/auth.properties</value>
</list>
</property>
</bean>
现在,当您更改属性时,您将只需要重新启动服务器,不需要重新创建war / jard。
请注意,您不需要具有系统参数。它用于为应用程序服务器保留标准配置目录。你可以使用:
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>file:/etc/conf/auth.properties</value>
</list>
</property>
</bean>
答案 1 :(得分:1)
一种解决方案是使用Maven Build Helper Plugin并执行目标:
附加资源
完整的例子是:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.3</version>
<executions>
<execution>
<id>add-resources</id>
<phase>process-resources</phase>
<goals>
<goal>add-resource</goal>
</goals>
<configuration>
<resources>
<resource>
<directory>../data-module/src/main/resources</directory>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
另一种方法是使用Maven Resources Plugin和目标
复制资源
对于这个插件,用法与此类似:
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<executions>
<execution>
<id>copy-resources</id>
<phase>generate-resources</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>src/main/resources</outputDirectory>
<overwrite>true</overwrite>
<resources>
<resource>
<directory>../data-module/src/main/resources</directory>
<includes>
<include>*.properties</include>
</includes>
</resource>
</resources>
</configuration>
</execution>
</executions>
这两个插件都可以帮助完成这样的任务。