2015-10-20 2 views
2

Я использую maven для упаковки моего файла войны. У меня есть некоторые зависимости, предоставляемые как область действия. Когда я делаю чистую установку maven, война создается успешно, но транзитивные зависимости банок с областью действия, как предусмотрено, включены в мой каталог lib. Есть ли способ удалить их?Проблема с Maven war Plugin

Пример сценария: Ниже один из моей зависимости в POM

<dependency> 
     <groupId>org.jboss.resteasy</groupId> 
     <artifactId>resteasy-jaxrs</artifactId> 
     <version>${resteasy.version}</version> 
     <scope>provided</scope> 
    </dependency> 

это один включая банку активации-1.1.jar. Также дерево зависимостей для resteasy-jaxrs похоже ниже.

[INFO] +- org.jboss.resteasy:resteasy-jaxrs:jar:2.3.6.Final:provided 
[INFO] | +- org.jboss.resteasy:jaxrs-api:jar:2.3.6.Final:provided 
[INFO] | +- javax.annotation:jsr250-api:jar:1.0:compile 
[INFO] | +- javax.activation:activation:jar:1.1:compile 
[INFO] | +- org.apache.httpcomponents:httpclient:jar:4.1.2:provided 
[INFO] | | \- org.apache.httpcomponents:httpcore:jar:4.1.2:provided 
[INFO] | \- net.jcip:jcip-annotations:jar:1.0:compile 
+0

Можете ли вы показать нам свои зависимости? – Christian

+0

@Christian Я добавил зависимость в вопрос – robin

+0

Можете ли вы опубликовать свой полный pom? – DaveRlz

ответ

1

Самый простой способ создать <dependencyManagement> тег и положить суб-зависимость внутри и установить область, чтобы при условии:

<dependencyManagement> 
    <dependencies> 
     <dependency> 
      <groupId>javax.annotation</groupId> 
      <artifactId>jsr250-api</artifactId> 
      <version>1.0</version> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>javax.activation</groupId> 
      <artifactId>activation</artifactId> 
      <version>1.1</version> 
      <scope>provided</scope> 
     </dependency> 
    </dependencies> 
</dependencyManagement> 

Таким образом, сфера вашей транзитивной-зависимость будет переписан:

[INFO] | +- javax.annotation:jsr250-api:jar:1.0:provided (scope managed from compile) 
[INFO] | +- javax.activation:activation:jar:1.1:provided (scope managed from compile) 

обязательно сделать Maven-> Update Project и проверить Force Update флажок перед проверкой dependency:tree.

+0

Большое спасибо. Его работа прекрасна. Не могли бы вы рассказать мне, почему исключение с символом wild card * не работает в моем сценарии? – robin

+0

Я не знаю, что вы пробовали. Но вы можете исключить его и создать зависимость с предоставленной областью. Но это будет гораздо больше работать, потому что эта зависимость, возможно, также вложена в другие зависимости. С помощью dependencyManagement вам нужно только установить область действия один раз. – Christian

+0

На самом деле то, что я пытался, как ниже org.jboss.resteasy Resteasy-jaxrs $ {Resteasy.версия} при условии * * robin

0

Вышеупомянутое решение невозможно в случае, если у меня так много транзитивных зависимостей, входящих в мою библиотеку. Наконец, получилось исключение maven, которое работает нормально.

<dependency> 
      <groupId>org.jboss.resteasy</groupId> 
      <artifactId>resteasy-jaxrs</artifactId> 
      <version>${resteasy.version}</version> 
      <scope>provided</scope> 
      <exclusions> 
       <exclusion> 
        <artifactId>*</artifactId> 
        <groupId>*</groupId> 
       </exclusion> 
      </exclusions> 
     </dependency> 
+0

Это просто не имеет смысла, потому что [при условии, что область не является транзитивной] (https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html), которую предоставленная область не будет вводить транзитивные зависимости , – khmarbaise

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