具有外部上下文和资源的Spring应用程序通过maven

时间:2013-05-23 21:04:24

标签: java spring maven maven-resources-plugin

是否有可能像往常一样构建一个spring应用程序jar文件/所有jar依赖项打包在jar中,但是在jar外部定义资源文件夹+ spring app-context.xml?如果是这样,有人能指出我的一个例子吗?

我想使用maven进行构建,如果可能的话,但maven将资源收集到jar的根目录,我希望外部可用/捕获这些资源,所以我想这里实际上有2个问题。

  1. 如何使spring从外部文件中获取上下文/属性。 (例如外部“classpath *:/ META-INF / spring / applicationContext.xml”)
  2. 如何使maven包装jar文件,而不是将资源压缩到主jar。虽然我猜这可以通过maven插件进行配置...我想第一个问题更重要,我只是觉得有一些模板解决方案,但是找不到一个例子。 / LI>

3 个答案:

答案 0 :(得分:0)

  

如何从外部文件中使用spring消耗上下文/属性。

使用Spring PropertyPlaceholderConfigurer

<bean 
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="ignoreResourceNotFound" value="true"/>
    <property name="locations">
        <list>
            <value>classpath:included.properties</value>
            <value>file:${HOME}/external.properties</value>
        </list>
    </property>
</bean>

将按顺序阅读locations,以后的项目将覆盖早期主题的属性值。

  

如何使maven包装jar文件,而不是将资源压缩到主jar。

如果上面的第一个答案对您有帮助,则无需这样做。

答案 1 :(得分:0)

我想我知道你在做什么。您正在尝试将特定于系统的配置保留在程序包之外。

我过去所做的是将applicationContext.xml保留在jar中,但也引用了外部的。该文件包含特定于系统的属性。我通常把它放到应用程序容器(tomcat)/ lib目录中。

如果您正在运行命令行应用程序,那么您可以直接将该文件作为-classpath争论传递。

我刚刚在工件中的applicationContext.xml顶部找到了这样的一行:

<import resource="classpath*:externalized-applicationContext.xml"/>

答案 2 :(得分:0)

我最终能够使用maven-shade-plugin来编辑超级jar的清单。一旦你获得了适合shade插件的xml咒语,就必须为具有相同名称处理程序的spring依赖项设置规则,这些处理程序在类加载器中相互冲突。您还需要修改清单类路径条目以包含文件夹名称。如果做得正确,这将给你一个&#34; uber&#34;它使用的jar +资源​​整齐地坐在它旁边的文件夹中。其他一切都是标准的maven + spring。