Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何过滤Maven中依赖项提供的资源?_Java_Maven - Fatal编程技术网

Java 如何过滤Maven中依赖项提供的资源?

Java 如何过滤Maven中依赖项提供的资源?,java,maven,Java,Maven,假设我有一个名为com.example:awesome的Java项目,它有一个名为com.external:awesome库的依赖项 如果这个很棒的库有configuration.xml之类的资源,那么在我在项目代码中使用它之前,如何过滤该资源,以便正确替换Maven属性占位符 例如,之类的内容需要更改为 假设: awesome库位于该项目外部,不是由 我 我不知道应用程序中使用的变量占位符 .xml文件。我只知道它们是由Maven定义的。 让我们以项目元数据为例,例如${artifact}

假设我有一个名为com.example:awesome的Java项目,它有一个名为com.external:awesome库的依赖项

如果这个很棒的库有configuration.xml之类的资源,那么在我在项目代码中使用它之前,如何过滤该资源,以便正确替换Maven属性占位符

例如,
之类的内容需要更改为

假设:

  • awesome库位于该项目外部,不是由 我
  • 我不知道应用程序中使用的变量占位符 .xml文件。我只知道它们是由Maven定义的。 让我们以项目元数据为例,例如${artifact}

您可以使用此解决方案:

  • 创建父(生成器)项目,并在其中放置常量,该常量将在资源文件中替换:

     <properties>
         <some.constant>123</some.constant>
     </properties>
    
  • 在awome-library.pom配置过滤器处理器中(例如,假设my-configuration.xml位于src/main/resources/META-INF中:

     <build>
        <resources>
            <resource>
                <directory>src/main/resources/META-INF</directory>
                <targetPath>META-INF</targetPath>
                <filtering>true</filtering>
                <includes>
                    <include>**/my-configuration.xml</include>
                </includes>
            </resource>
    
    
    src/main/resources/META-INF
    META-INF
    真的
    **/my-configuration.xml
    

  • 在父项目中运行
    maven clean install

  • 使用,它将提取资源,默认情况下为
    ${project.build.directory}/dependency
    (如果需要可以更改)

    然后,使用以下任一方法:

    • 并在该插件的执行中定义筛选,并将其配置为指向
      ${project.build.directory}/dependency
    • 只需在POM的
      build
      部分中放置
      resources
      元素,并将其指向
      ${project.build.directory}/dependency
      ,并进行适当的筛选,可能会更简单。不过,如果您还需要标准
      src/main/resources
      ,您也需要将其放在那里

    我正在尝试的一件事是解包,然后过滤,但我不确定它是否会工作。不幸的是,awesome库是外部的,我没有构建。我也不知道它正在使用什么Maven变量,库使用的一些明显的东西是项目元数据(如工件Id、版本号等)。如果库项目存在,你能显示pom.xml吗?还有我的配置文件。让我们假设库的pom.xml文件不存在,配置文件和我在问题中发布的一样小,只有一个。项目和库之间的唯一关系是前者将后者作为标准Maven依赖项。I suppose,只有maven assembly插件对您的情况有帮助。您需要创建元项目,这一目标将为maven“动态”编辑配置文件提供机会。我按照您的建议做了。唯一的问题是,在完成资源筛选(即流程资源)之前,应该先完成依赖项:解包,例如,在生成资源中。
    ${some.constant}
    
     <build>
        <resources>
            <resource>
                <directory>src/main/resources/META-INF</directory>
                <targetPath>META-INF</targetPath>
                <filtering>true</filtering>
                <includes>
                    <include>**/my-configuration.xml</include>
                </includes>
            </resource>