有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我们有一个名为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) 个答案

  1. # 1 楼答案

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

  2. # 2 楼答案

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