【问题标题】:pom.xml is not able to read properties from external property filepom.xml 无法从外部属性文件中读取属性
【发布时间】:2017-06-18 21:53:16
【问题描述】:

我有一个 pom.xml,我在其中定义了一个属性,该属性是从外部文件引用的 -

请在下面找到我的 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.src</groupId>
    <artifactId>common</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>common</name>
    <url>http://maven.apache.org</url>
    <scm>
        <connection>scm:svn:http://127.0.0.1/dummy</connection>
        <developerConnection>scm:svn:https://127.0.0.1/dummy</developerConnection>
        <tag>HEAD</tag>
        <url>http://127.0.0.1/dummy</url>
    </scm>

    <properties>
        <salcommon.version>${common-version}</salcommon.version>
    </properties>
    <repositories>
        <repository>
            <id>secureaccesslnk-maven</id>
            <url>https://nexus-maven/</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
    </repositories>
        <distributionManagement>
        <repository>
            <id>secureaccesslnk-maven-release</id>
            <url>https://nexus-maven-release/</url>
        </repository>
        <snapshotRepository>
            <id>secureaccesslnk-maven-snapshot</id>
            <url>https://nexus-maven-release/</url>
        </snapshotRepository>
    </distributionManagement>


    <dependencies>
        <dependency>
            <groupId>com.common</groupId>
            <artifactId>sal-logging</artifactId>
            <version>${salcommon.version}</version>
        </dependency>
        <dependency>
            <groupId>com.common</groupId>
            <artifactId>sal-auditor</artifactId>
            <version>${salcommon.version}</version>
        </dependency>
    </dependencies>

    <build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.tmpl</include>
                </includes>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.tmpl</include>
                </includes>
            </resource>
        </resources>
        <extensions>
            <extension>
                <groupId>org.apache.maven.wagon</groupId>
                <artifactId>wagon-webdav-jackrabbit</artifactId>
                <version>1.0-beta-7</version>
            </extension>
        </extensions>

        <plugins>
            <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>properties-maven-plugin</artifactId>
        <version>1.0.0</version>
        <executions>
          <execution>
            <phase>initialize</phase>
            <goals>
              <goal>read-project-properties</goal>
            </goals>
            <configuration>
              <files>
                <file>common.version.properties</file>
              </files>
            </configuration>
          </execution>
        </executions>
      </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.5.1</version>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <version>0.7.4.201502262128</version>
                <configuration>
                    <destFile>${sonar.jacoco.reportPath}</destFile>
                    <append>true</append>
                </configuration>
                <executions>
                    <execution>
                        <id>agent</id>
                        <goals>
                            <goal>prepare-agent</goal>
                        </goals>
                        <phase>test</phase>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-source-plugin</artifactId>
                <version>2.4</version>
                <executions>
                    <execution>
                        <id>attach-sources</id>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

        </plugins>
    </build>
</project>

common.version.properties 详细信息如下:-

common-version=3.0.1.0-SNAPSHOT

即使我已经定义了从外部文件读取属性的插件。当我执行 mvn clean install 时,属性 ${common-version} 不会在运行时被替换

错误 - com.common 的 dependencies.dependency.version' e 一个有效的版本,但是是 '${common-version}'。 @ 第 107 行,第 13 列

我尝试了很多次网络搜索,但没有一个对我有用。请帮助!

【问题讨论】:

  • 不把版本放到pom文件是什么原因?

标签: java xml maven


【解决方案1】:

据我所知,不可能做你想做的事情(即外部化工件的版本)。这仅仅是因为 Maven 在任何插件运行之前/从文件中读取内容之前需要整个依赖集(这是先有鸡还是先有蛋的情况)。

【讨论】:

    【解决方案2】:

    不确定为什么要外部化 jar 版本。

    如果您希望所有 jar 文件的版本位于同一位置并且应该在所有项目中保持一致,那么您可以使用我的 maven 提供的 dependencyManagement 标记。

    在父 pom 中添加所有常见的依赖项,在子项目中只指定没有版本的依赖项

    【讨论】:

      【解决方案3】:

      据我所知,不可能做你想做的事情(即外部化工件的版本)。 这仅仅是因为 Maven 需要在任何插件运行之前/从文件中读取内容之前设置整个依赖项(这是先有鸡还是先有蛋的情况)。

      这个thread似乎支持这个说法。

      【讨论】:

        【解决方案4】:

        您可以使用 BOM POM 并将其用作主 POM 中的父级。这样您就可以在外部文件中拥有这些属性。

        BOM POM:

        <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>
          <groupId>com.test</groupId>
          <artifactId>bom</artifactId>
          <version>1.0.0</version>
          <packaging>pom</packaging>
          <properties>
            <common-version>3.0.1.0-SNAPSHOT</common-version>
          </properties>
        </project>
        

        在主 POM 中,添加父声明:

          <parent>
            <groupId>com.test</groupId>
            <version>1.0.0</version>
            <artifactId>bom</artifactId>
          </parent>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-10-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-06-24
          • 2011-08-10
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多