gpt4 book ai didi

maven-2 - 如何在 Maven 中过滤资源,用依赖项 artifactId 替换?

转载 作者:行者123 更新时间:2023-12-02 18:57:58 25 4
gpt4 key购买 nike

我正在尝试构建一个包含 xml 文件作为资源的 jar。我想对该 xml 应用过滤器,以将依赖项的名称插入到 xml 中。过滤工作正常,因为我能够放入 ${project.build.finalName} 并将其替换。我发现one hint我正在寻找的特性可能是

${project.dependencies[0].artifactId}

但这似乎不起作用。我正在寻找替代品

<fileName>${project.dependencies[0].artifactId}</fileName>

<fileName>OtherLibrary</fileName>

这可能吗?

xml,位于 src/main/resources 中:

<somenode>
<fileName>${project.dependencies[0].artifactId}</fileName>
</somenode>

pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>com.foo</groupId>
<artifactId>Thing</artifactId>
<version>1.0-SNAPSHOT</version>
<name>Thing</name>
<url>http://maven.apache.org</url>
<build>
<resources>
<resource>
<directory>${basedir}/src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
<dependencies>
<dependency>
<groupId>com.pts</groupId>
<artifactId>OtherLibrary</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>

最佳答案

该死,你是对的,这个属性在资源过滤期间不会被替换。这很奇怪,听起来像是 Maven Resources Plugin 中的一个错误。因为此属性在 process-resources 阶段正确插值,正如我将在下面建议的解决方法中演示的那样(基于 maven-antrun-plugin 和 replace 任务)。

首先,将以下内容添加到您的 POM 中:

  <plugin>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<phase>process-resources</phase>
<configuration>
<tasks>
<echo>${project.dependencies[0].artifactId}</echo><!-- I'm a test -->
<replace file="${project.build.outputDirectory}/myxmlfile.xml"
token="@@@" value="${project.dependencies[0].artifactId}"/>
</tasks>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>

然后,将您的 XML 文件更新为:

<somenode>
<fileName>@@@</fileName>
</somenode>

通过这些更改,运行 mvn process-resources 将产生以下结果:

$ cat target/classes/myxmlfile.xml 
<somenode>
<fileName>OtherLibrary</fileName>
</somenode>

这证明该属性是插值的(但不是在 maven 过滤资源期间设置的)1。如果您需要过滤多个文件,则replace任务可以采用文件集。对其进行调整以满足您的需求。

1 实际上,在 Maven 2.x Resources Plugin 中为这个错误创建一个新的 Jira 会很好。 . 我创建了MRESOURCES-118 .

关于maven-2 - 如何在 Maven 中过滤资源,用依赖项 artifactId 替换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2246524/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com