假设我们具有以下XML结构:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>ProjectName</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<java.version>1.8</java.version>
</properties>
<build>
<plugins>
<plugin>
<groupId>pl.project13.maven</groupId>
<artifactId>git-commit-id-plugin</artifactId>
<version>2.2.4</version>
<executions>
<execution>
<id>get-the-git-infos</id>
<goals>
<goal>revision</goal>
</goals>
</execution>
</executions>
<configuration>
<dotGitDirectory>${project.basedir}/.git</dotGitDirectory>
<prefix>git</prefix>
<verbose>false</verbose>
<generateGitPropertiesFile>true</generateGitPropertiesFile>
<generateGitPropertiesFilename>${project.build.outputDirectory}/${artifactId}_git.properties</generateGitPropertiesFilename>
<format>json</format>
</configuration>
</plugin>
</plugins>
</build>
</project>
我在下一行中看到对artifactId
的引用,解析为ProjectName(文件中的第一个artifactId),而不是git-commit-id-plugin(文件中的第二个artifactId)。
<generateGitPropertiesFilename>${project.build.outputDirectory}/${artifactId}_git.properties</generateGitPropertiesFilename>
XML解析器如何解析对一个以上存在(在不同级别)的属性的引用?它是否解析为当前级别之前的最高级别(假定根为最高级别)可以找到的同名属性?
XML解析器...很好...解析。它与xml内容的解释无关。 xml的使用者(需要该xml的程序的作者)取决于"${project.build.outputDirectory}/${artifactId}_git.properties"
之类的字符串。那只是一个字符串。 XML解析器没有含义。对于消费者而言,他可以用自己喜欢的任何东西代替artifactId
。可能是project.artifactId
。可能是project.build.plugins.plugin.artifactId
。甚至可能像诗一样奇怪。因此,直到阅读了该特定xml配置文件的文档,您才能知道。