2008-10-29 4 views
44

Я хотел бы выпустить проект моментального снимка «foo-1.0-SNAPSHOT», используя плагин релиза maven. Проект зависит от стороннего модуля «bar-1.0-SNAPSHOT», который еще не выпущен. Я использую опцию 'allowTimestampedSnapshots' в pom.xml моего проекта, чтобы разрешить моментальные снимки, но я предполагаю, что сторонний модуль (панель) не отмечен timestamped, если я не построил его сам, поскольку maven все еще жалуется на нерешенные зависимости SNAPSHOT.Как выпустить проект, который зависит от стороннего проекта SNAPSHOT в maven

Есть ли способ опубликовать проект foo независимо от зависимых проектов SNAPSHOT, и если нет, то как добавить временную метку в сторонний проект?

ответ

7

Короткий ответ - following answer .... длинный ответ - вы можете обойти его.

Единственный способ, которым я справлялся в прошлом, - это эффективно раскошелиться на стороннюю библиотеку и вырезать сам релиз. Это, конечно, легче сказать, чем сделать, и просто сложно, если библиотека большая, сложная и невозможная, если библиотека сторонних разработчиков закрыта. Более простой способ, возможно, приблизиться к третьей стороне и попросить их сократить выпуск.

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

+5

Не совсем верно, см. Другие ответы, вы можете указать maven через `-DignoreSnapshots = true` для выпуска даже с зависимостями моментальных снимков. То, что вам следует избегать этого и делать, только если нет другого выбора, это еще одна история. – 2013-11-22 01:14:18

+0

Совет по сонатипу заключается в развертывании в локальном репозитории http://blog.sonatype.com/2009/01/best-practices-for-releasing-with-3rd-party-snapshot-dependencies/#.UstQinlq5t0 – 2014-01-07 00:59:26

-2

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

6

Предыдущий ответ предложил изменить идентификатор группы и артефакта ... не делайте этого, так как maven не узнает его как тот же артефакт позже, когда эта зависимость будет выпущена, и вы получите две копии на CLASSPATH. Мой предпочтительный метод заключается в том, чтобы изменить только версию, и я сделаю что-то вроде: [оригинальная версия] - [мое имя-org] - [версия svn, которую я вытащил), поэтому я получаю что-то вроде 1.0-SONATYPE-3425. Используя svn rev, я всегда могу вытащить источник и исправить его, если нужно, и точно знать, что я использую, не вытаскивая весь источник в свой собственный svn.

Обновление - I blogged об этом некоторое время назад.

138

Проблема с именем параметра allowTimestampedSnapshots, это в документации, но источник плагина использует другое имя параметра в выражении - ignoreSnapshots.

Так что просто используйте -DignoreSnapshots=true, и цель подготовки плагина выпуска будет игнорировать зависимости моментальных снимков.

12

Использование опции Maven-релиз-плагин

-DignoreSnapshots=true 

вместо

-DallowTimestampedSnapshots=true 

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

Этот параметр следует обрабатывать очень осторожно, поскольку использование версий снимков в релизе может впоследствии разорвать вашу версию, если обновлена ​​зависимость моментального снимка, что в нормальном случае не то, что вы хотите.