Maven не разрешает свойства из родительского файла pom.xml - PullRequest
0 голосов
/ 17 июня 2019

У меня родительский проект pom выглядит так:

    <?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>
        <parent>
            <groupId>com.sss.it.cf</groupId>
            <artifactId>cf-tenant-prov</artifactId>
            <version>3.3.0-SNAPSHOT</version>
        </parent>
        <groupId>com.sss.it.cf</groupId>
        <artifactId>cf-tenant-prov.parent</artifactId>
        <version>3.3.0-SNAPSHOT</version>
        <packaging>pom</packaging>
    <properties>
        <liquibase.version>3.1.1</liquibase.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <java.version>1.8</java.version>
        <maven.compiler.target>1.8</maven.compiler.target>
        <maven.compiler.source>1.8</maven.compiler.source>
        <postgresql.version>42.2.5</postgresql.version>
        <spring.security.jwt.version>1.0.9.RELEASE</spring.security.jwt.version>
        <spring.security.oauth2.version>2.0.15.RELEASE</spring.security.oauth2.version>
        <iaik.iaik_jce.version>5.22</iaik.iaik_jce.version>
    </properties>

    <modules>
        <module>cf-tenant-prov.initdb</module>
        <module>cf-tenant-prov.router</module>
        <module>cf-tenant-prov.common</module>
        <module>cf-tenant-prov.integration</module>
        <module>cf-tenant-prov.dao</module>
        <module>cf-tenant-prov.messaging</module>
        <module>cf-tenant-prov.service</module>
        <module>cf-tenant-prov.web</module>
        <module>cf-tenant-prov.assembly</module>
    </modules>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.1.1.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <dependency>
                <groupId>org.powermock</groupId>
                <artifactId>powermock-api-mockito2</artifactId>
                <version>${powermock-api-mockito2.version}</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.powermock</groupId>
                <artifactId>powermock-module-junit4</artifactId>
                <version>${powermock-module-junit4.version}</version>
                <scope>test</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>

Модули в этом проекте имеют такие помпы:

    <?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">
    <parent>
        <artifactId>cf-tenant-prov.parent</artifactId>
        <groupId>com.sss.it.cf</groupId>
        <version>3.2.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>cf-tenant-prov.common</artifactId>
    <dependencies>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.25</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
        </dependency>


        <dependency>
            <groupId>iaik</groupId>
            <artifactId>iaik_jce</artifactId>
            <version>${iaik.iaik_jce.version}</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>${jackson.version}</version>
        </dependency>
      </dependencies>
    </project>

Это успешно собирается на моей машине, но в сборке jenkins, и если кто-то клонирует этот мерзавец и делает сборку maven, я получаю следующее сообщение:

[ERROR] [ERROR] Some problems were encountered while processing the POMs:

[ERROR] 'dependencies.dependency.version' for iaik:iaik_jce:jar must be a valid version but is '${iaik.iaik_jce.version}'. @ com.sap.it.cf:cf-tenant-prov.common:
[unknown-version], C:\Users\I501807\git\hcisvcprov\cf-tenant-prov.parent\cf-tenant-prov.common\pom.xml 
<file:///C:/Users/XXXXXX/git/hcisvcprov/cf-tenant-prov.parent/cf-tenant-prov.common/pom.xml> , line 33, column 22 

для всех версий.

Это работало раньше, когда эти свойства были в отдельных пом.

Я просто переместил эти зависимости на один уровень вверх, чтобы они не повторялись в каждом файле pom.

Ответы [ 2 ]

0 голосов
/ 17 июня 2019

Ваш родительский файл pom.xml должен иметь все зависимости (каждая зависимость). который будет использоваться в дочерних модулях) под

<dependencyManagement>
  .
  .
</dependencyManagement>

Включая их версии (вы можете использовать свойства или напрямую указывать версию), затем вы можете использовать эти зависимости в любом дочернем модуле, даже не указав версию.

Родительский pom.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>
  <parent>
    <groupId>com.sss.it.cf</groupId>
    <artifactId>cf-tenant-prov</artifactId>
    <version>3.3.0-SNAPSHOT</version>
  </parent>
  <groupId>com.sss.it.cf</groupId>
  <artifactId>cf-tenant-prov.parent</artifactId>
  <version>3.3.0-SNAPSHOT</version>
  <packaging>pom</packaging>
  <properties>
    <liquibase.version>3.1.1</liquibase.version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <java.version>1.8</java.version>
    <maven.compiler.target>1.8</maven.compiler.target>
    <maven.compiler.source>1.8</maven.compiler.source>
    <postgresql.version>42.2.5</postgresql.version>
    <spring.security.jwt.version>1.0.9.RELEASE</spring.security.jwt.version>
    <spring.security.oauth2.version>2.0.15.RELEASE</spring.security.oauth2.version>
    <iaik.iaik_jce.version>5.22</iaik.iaik_jce.version>
  </properties>

  <modules>
    <module>cf-tenant-prov.initdb</module>
    <module>cf-tenant-prov.router</module>
    <module>cf-tenant-prov.common</module>
    <module>cf-tenant-prov.integration</module>
    <module>cf-tenant-prov.dao</module>
    <module>cf-tenant-prov.messaging</module>
    <module>cf-tenant-prov.service</module>
    <module>cf-tenant-prov.web</module>
    <module>cf-tenant-prov.assembly</module>
  </modules>

  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-dependencies</artifactId>
        <version>2.1.1.RELEASE</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
      <dependency>
        <groupId>org.powermock</groupId>
        <artifactId>powermock-api-mockito2</artifactId>
        <version>${powermock-api-mockito2.version}</version>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>org.powermock</groupId>
        <artifactId>powermock-module-junit4</artifactId>
        <version>${powermock-module-junit4.version}</version>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.25</version>
        <scope>compile</scope>
      </dependency>
      <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>4.0.1</version>
      </dependency>
      <dependency>
        <groupId>iaik</groupId>
        <artifactId>iaik_jce</artifactId>
        <version>${iaik.iaik_jce.version}</version>
      </dependency>
      <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-core</artifactId>
        <version>${jackson.version}</version>
      </dependency>
    </dependencies>
  </dependencyManagement>
</project>

И дочерний модуль должен выглядеть так: -

<?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">
  <parent>
    <artifactId>cf-tenant-prov.parent</artifactId>
    <groupId>com.sss.it.cf</groupId>
    <version>3.3.0-SNAPSHOT</version>
  </parent>
  <modelVersion>4.0.0</modelVersion>

  <artifactId>cf-tenant-prov.common</artifactId>
  <dependencies>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
    </dependency>
    <dependency>
      <groupId>iaik</groupId>
      <artifactId>iaik_jce</artifactId>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
    </dependency>
  </dependencies>
</project>

0 голосов
/ 17 июня 2019

Ваш родитель говорит, что это версия 3.3.0-SNAPSHOT. Но ваши модули ссылаются на версию 3.2.0-SNAPSHOT. Свойства уже включены в 3.2.0-SNAPSHOT или вы просто забыли увеличить версию в модуле POMs?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...