2015-12-01 4 views
0

У меня есть проект, который нуждается в зависимости от iText 5.5.2 и iText 2.1.7 (Primefaces нуждается в этой конкретной версии во время выполнения и не будет работать с iText 5 из-за проблем с лицензией).Eclipse: исключить зависимость от maven из цикла сборки

Так что у меня это в моем pom.xml:

<dependency> 
    <groupId>com.itextpdf</groupId> 
    <artifactId>itextpdf</artifactId> 
    <version>5.5.2</version> 
    <scope>compile</scope> 
</dependency> 

<!-- iText 2.1.7 is necessary at runtime to have the 'Export to PDF' function of Primeface work --> 
<!-- It won't conflict with iText 5 as the packages are different --> 
<dependency> 
    <groupId>com.lowagie</groupId> 
    <artifactId>itext</artifactId> 
    <version>2.1.7</version> 
    <scope>runtime</scope> 
</dependency> 

Проблема заключается в том, что я не хочу, чтобы наши разработчики, чтобы иметь возможность импортировать классы из IText 2.1.7 (com.lowagie * пакет.). Я хочу заставить их использовать классы из iText 5.5.2 (пакет com.itextpdf. *).

Хотя iText 2.1.7 находится в области исполнения, Eclipse по-прежнему добавляет файл jar в путь сборки, что позволяет разработчикам импортировать неправильный пакет (com.lowagie вместо com.itextpdf).

Есть ли способ исключить его из пути сборки?

+0

Потенциальный дубликат http://stackoverflow.com/questions/25865592/maven-eclipse-how-can-eclipse-honor-maven-runtime-scope –

+0

Я обновил свой ответ, есть трюк с использованием профилей, который хорошо работает. Надеюсь, что может помочь –

ответ

1

К сожалению, на Eclipse, как правило, не существует возможности с нормальной сборкой, это известная ошибка, проверьте Bug 414645 и Bug 376616. Eclipse (m2e) не может правильно управлять областью зависимостей Maven.

Однако, если вы поместите зависимости времени выполнения в профиль, тогда Eclipse не добавит их в путь к классам (хотя профиль по умолчанию не должен быть активным). Я просто тестировал его на Eclipse Mars, и он отлично работает.

Таким образом, в вашем случае, вы можете добавить в свой POM:

<profiles> 
    <profile> 
     <id>runtime</id> 
     <dependencies> 
      <dependency> 
       <groupId>com.lowagie</groupId> 
       <artifactId>itext</artifactId> 
       <version>2.1.7</version> 
       <scope>runtime</scope> 
      </dependency> 
     </dependencies> 
    </profile> 
</profiles> 

Как таковой, он не может быть использован для компиляции на Eclipse. Тем не менее, ваша сборка затем должна будет использовать его во время выполнения, работая с -Pruntime в этом случае.

Хотя адаптация POM и создание проблемы с IDE может быть не идеальной, это может стать хорошим компромиссом для достижения вашей цели.

+0

Поскольку у дублированного вопроса не было ни веры, ни ответа, я не мог бы отметить это как дубликат, поэтому я в конечном итоге ответил на оба вопроса. Мне интересно в этом конкретном случае, что было бы лучшей практикой здесь. –

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