2012-04-10 2 views
5

Я создаю .ear с использованием MavenКак включить зависимости в ухо без версии в имени файла

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-ear-plugin</artifactId> 
    <version>2.6</version> 
    <configuration> 
    <finalName>wsformatter-ear</finalName> 
    <includeLibInApplicationXml>true</includeLibInApplicationXml> 
    <version>1.4</version> 
    </configuration> 
</plugin> 

Все зависимость в .ear выглядеть Joda-тайм-1.6.2.jar, commons-io-1.4.jar и т.д.

Но также у меня есть зависимости, которые я хочу иметь без версии. Например, как я могу сделать, что зависимость SLF4J-апи-1.5.6.jar будет выглядеть SLF4J-api.jar в моей .ear

+0

Зачем вам это нужно? – weekens

+1

У меня есть зависимость от моих других проектов. Версии этих проектов очень часто меняются – Ilya

ответ

1

В принципе, вы не можете (без некоторых вроде взлома на настройках плагинов Maven), и даже если бы вы могли - просто не делайте этого. Подход Maven и философия относительно зависимостей строги и прямо связаны с ними, включая стандартную конвенцию о наличии версии в качестве суффикса имени файла. Он сразу же сообщает, какая версия артефакта используется. Если вы зависите от некоторых артефактов, которые часто выпускаются, вы все равно должны обновлять свою версию в POM вашего EAR, поэтому его «распространение» не так или иначе самопроизвольно. Поэтому я не вижу никаких проблем с этим суффиксом имени файла.

Если эта потребность в частых изменениях проблематична для вас, возможно, вам стоит подумать о том, чтобы каким-то образом изменить этот часто задаваемый цикл разработки артефакта? Возможно, вы можете продлить немного времени, затрачиваемое на ту же версию SNAPSHOT? Даже если вы делаете частые «внутренние» релизы (например, nightbuilds), Maven не заставляет вас подбрасывать вашу версию каждой версии (в смысле Maven Release Plugin). Вы можете оставаться с версией SNAPSHOT столько, сколько захотите. Даже в действительно быстрых Agile-процессах (или Kanban) этот вид «реального» выпуска обычно происходит каждые несколько недель, и это достаточно долго, чтобы быть управляемым.

В конце концов, это не так, я не буду вам помогать (или что-то в этом роде) или не хочу. Я просто думаю, что ты пытаешься пойти против Мейвена. Maven действительно силен, если вы принимаете и соглашаетесь с его подходами и соглашениями. По моему опыту, попытка обойти это означает проблемы (рано или поздно). Я уже видел много проектов с конфигурацией Maven-like-Ant и многими разработчиками, жалующихся на то, что Maven сосет. После выяснения там я сказал им: «Maven не сосать, ваши POMs».

+0

Одна из причин для этого: номера версий ломают ссылки в файле persistence.xml, потому что им нужно ссылаться на конкретное имя файла, которое невозможно узнать с помощью посредничества Maven (я не могу быть что мой другой-1.0.0.jar на самом деле будет частью уха, может быть, он заменен другим-1.0.1.jar). –

16

Я полностью согласен с Михалом Калиновски. Но я попал в ту же ситуацию, ну, на самом деле, обратная ситуация: кто-то сконфигурировал проект, чтобы исключить версии в конечном EAR, и я искал способ отменить это, потому что это было против образа жизни maven, вы искали в Интернете и нашли этот вопрос, но ответ я нашел в самом коде. Вы можете использовать:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-ear-plugin</artifactId> 
    <configuration> 
     <version>5</version> 
    <defaultLibBundleDir>lib</defaultLibBundleDir> 
    <fileNameMapping>no-version</fileNameMapping> 
    </configuration> 
</plugin> 

линии с тегом fileNameMapping является то, что вы хотите. Надеюсь, это поможет.

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