pom.xml无法从外部属性文件中读取属性

时间:2017-06-12 11:22:49

标签: java xml maven

我有一个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,

Error - dependencies.dependency.version' 有效版本,但是'$ {common-version}'。 @第107行,第13栏

我试图在网上搜索很多,但没有一个解决方案适合我。请帮忙!

4 个答案:

答案 0 :(得分:1)

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

如果你想要所有jar文件的版本在同一个位置并且应该在所有项目中保持一致,那么你可以使用我的maven提供的dependencyManagement标签。

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

thread似乎支持这种说法。

答案 3 :(得分:0)

您可以使用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>