2015-07-24 2 views
1

У меня есть модуль и тесты для этого модуля. Испытания требуют resteasy-client, но модуль не делает. Я не совместим с зависимостями модулей и зависимостями от тестов, как я могу это сделать? Я пытаюсь использовать область импорта «maven». pom.xml:Maven "import" scope

<?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/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <parent> 
     <groupId>ru.my.project</groupId> 
     <artifactId>my-parent</artifactId> 
     <version>1.0-SNAPSHOT</version> 
    </parent> 

    <artifactId>my-module-1</artifactId> 
    <packaging>jar</packaging> 
    <name>This is one of my modules</name> 

    <dependencies> 
     <dependency> 
      <groupId>ru.my.project</groupId> 
      <artifactId>my-module-2</artifactId> 
      <version>${project.version}</version> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>com.fasterxml.jackson.core</groupId> 
      <artifactId>jackson-core</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>com.fasterxml.jackson.core</groupId> 
      <artifactId>jackson-databind</artifactId> 
     </dependency> 

<!--I want to import dependencies for test from this pom:--> 
     <dependency> 
      <groupId>ru.my.project.test</groupId> 
      <artifactId>my-module-1-test</artifactId> 
      <type>pom</type> 
      <version>1.0</version> 
      <scope>import</scope> 
     </dependency> 
    </dependencies> 

</project> 

и мой-модуль-1.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/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>ru.my.project.test</groupId> 
    <artifactId>my-module-1-test</artifactId> 
    <version>1.0</version> 
    <packaging>pom</packaging> 
    <name>Dependencies for testing module-1</name> 

    <dependencyManagement> 
     <dependencies>  
      <dependency> 
       <groupId>org.jboss.resteasy</groupId> 
       <artifactId>resteasy-client</artifactId> 
       <version>3.0.11.Final</version> 
       <scope>test</scope> 
      </dependency> 
      <dependency> 
       <groupId>org.jboss.resteasy</groupId> 
       <artifactId>resteasy-jaxrs</artifactId> 
       <version>3.0.11.Final</version> 
       <scope>test</scope> 
      </dependency> 
      <dependency> 
       <groupId>org.apache.httpcomponents</groupId> 
       <artifactId>httpclient</artifactId> 
       <version>4.5</version> 
       <scope>test</scope> 
      </dependency> 
     </dependencies> 
    </dependencyManagement>  
</project> 

Я, кажется, что МВН видит этот файл, но компиляция терпит неудачу:

[ERROR] /home/xxx.java:[5,38] error: package org.jboss.resteasy.client.jaxrs does not exist [ERROR] /home/xxx.java:[6,38] error: package org.jboss.resteasy.client.jaxrs does not exist [ERROR] /home/xxx.java:[7,38] error: package org.jboss.resteasy.client.jaxrs does not exist

Но когда я копирую-вставляю те зависимостей в модуле-1`s pom.xml все в порядке! Но я не хочу смешивать, он становится нечитаемым быстро.

+1

Просто используйте ' тест'. – khmarbaise

+0

вместо импорт? Пытался. Не работает / – abkvandrd

ответ

4

Это потому, что область import работает только в пределах <dependencyManagement>. (Под обложкой в ​​основном просто вставляют импортированный контент.)

Таким образом, он может использоваться для управления (настройки) версий зависимостей, которые вы потенциально используете, но для фактического в зависимости от них требуется отдельное объявление (в пределах <dependencies>) ,

Лучшим способом, который я нашел до сих пор для достижения вашей цели (как я понял), является создание модуля, такого как my-module-1-testing-support, который зависит от JUnit, Mockito и т. Д., Используя область compile. Тогда вы можете зависеть от my-module-1-testing-support с использованием области test и получать ее зависимости (транзитивно) с помощью области test, как описано в Introduction to the Dependency Mechanism.

0

Используйте Bill of Materials pattern, описанный Apache.

(открыть ссылку и поиск "BOM")

The root of the project is the BOM pom. It defines the versions of all the artifacts that will be created in the library. Other projects that wish to use the library should import this pom into the dependencyManagement section of their pom.

Смежные вопросы