如何在xml文件中替换具有实际值的变量,该文件位于Maven的另一个依赖jar文件中

时间:2011-06-17 17:25:42

标签: java maven

我们有一个名为web-app1的项目,并依赖于另一个名为core-app.jar的jar文件,该文件由另一个团队作为共享库提供,但此核心应用程序中有一个hibernate.cfg.xml .jar(在jar内),内容如下。

<hibernate-configuration>
    <session-factory>
        <property name="dialect">${hibernate.dialect}</property>
        <property name="query.substitutions"><![CDATA[false 'N', true 'Y']]></property>
        <property name="show_sql">false</property>
        <property name="format_sql">false</property>
        <property name="use_sql_comments">false</property>
        <property name="generate_statistics">true</property>
        <property name="hibernate.connection.release_mode">after_transaction</property>
       <!-- Search Configurations -->
        <property name="hibernate.search.default.directory_provider">org.hibernate.search.store.FSDirectoryProvider</property>
        <property name="hibernate.search.default.indexBase">${lucene.index.home}</property>
        <property name="hibernate.search.default.batch.merge_factor">10</property>
        <property name="hibernate.search.default.batch.max_buffered_docs">10</property>
    </session-factory>
</hibernate-configuration>

正如我们在“搜索配置”部分中看到的那样,有一个变量$ {lucene.index.home}应该被不同操作系统平台上的其他项目替换, 所以问题是,maven是否提供了一种过滤依赖jar文件并过滤内容的方法?任何插件?战争:战争,解压缩?依赖?我无法想出一个快速的方法来做到这一点。它看起来对我来说,无论采用什么插件,插件基本上都需要做4件事。

  • 1将罐子打开包装 流程资源阶段。
  • 2用$ {var}代替 在个人资料中定义的价值。
  • 3再将它装回罐子里。
  • 4需要从中复制回来 打包/拆包工作区回到 maven进程路径??
之前有人遇到过类似的要求吗?

谢谢

2 个答案:

答案 0 :(得分:1)

我认为这些值是在运行时设置的,可能是VM参数。提供一个必须修改才能使用的jar文件是没有意义的。

答案 1 :(得分:0)

如果你真的真的必须在构建时进行过滤以进行配置,那么应该过滤那些配置文件,而不是依赖项。然后,您应该将所述文件捆绑到多个工件中(当然假设您的目标是多个环境),或者在构建的工件之外作为外部化资源提供。