2012-04-18 3 views
0

Я начал изучать Maven и иметь следующий вопрос:Maven: динамическая спецификация зависимостей

Я хотел бы динамически определять зависимость для построения Maven проекта вместо использования зависимостей, указанных в РОМЕ - есть способ сделать это?

Таким образом, хотя у меня есть следующая зависимость, указанная в POM

... 
<dependencies> 
<dependency> 
<groupId>group</groupId> 
<artifactId>ProjectComponent</artifactId> 
<version>1.0</version> 
</dependency> 
... 

Я хотел бы указать в команде сборки, которую я хочу использовать другую версию. Есть ли способ указать это?

Идея состоит в том, что я хочу иметь интеграционную сборку, созданную в Jenkins, с зависимостью от последнего доступного моментального снимка системы для конкретной ветки. Этот снимок еще не выпущен в репозиторий maven, поэтому я хотел бы получить его в Jenkins и указать зависимость для mvn build.

Спасибо!

ВОЗМОЖНОЕ РЕШЕНИЕ:. То, что я закончил с, чтобы использовать $ {my.lib.version} строительство и указать его с -Dmy.lib.version = 1.0-SNAPSHOT»при вызове к МВН Таким образом, я могу использовать он для интеграции с Jenkins строит путем выборки произвольных версий зависимостей от svn и подачи их снимков в интеграцию build pom.

+0

Каково ваше намерение иметь динамическую зависимость? Можете ли вы объяснить это немного больше? – khmarbaise

+0

@khmarbaise Идея состоит в том, что я хочу иметь сборку интеграции, созданную в Jenkins, с зависимостью от последнего доступного моментального снимка системы для конкретной ветки. Этот снимок еще не выпущен в репозиторий maven, поэтому я хотел бы получить его в Jenkins и указать зависимость для mvn build. – Hippopotamus

+0

Лучшим решением является использование версий SNAPSHOT для такой цели. – khmarbaise

ответ

0

То, что я закончил с, чтобы использовать $ {my.lib. version} и указать его с помощью -Dmy.lib.version = 1.0-SNAPSHOT "при вызове mvn. Таким образом, я могу использовать его для сборки интеграции Jenkins, выбирая произвольные версии зависимостей снимков от svn и загружая их версии моментальных снимков в сборку интеграции pom.

0

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

+0

на самом деле вы можете указать его как -Dmy.lib.version = 1.0-SNAPSHOT "(как было предложено), если у вас есть зависимость в pom, написанная как $ {my.lib.version} – Hippopotamus

+0

Это сделает вашу сборку невоспроизводимой. Который, по-моему, не прошел. – khmarbaise

3

Maven может использовать «динамически» указанное свойство (например: group.ProjectComponent.ve rsion) с помощью профилей.

<dependencies> 
    <dependency> 
    <groupId>group</groupId> 
    <artifactId>ProjectComponent</artifactId> 
    <version>${group.ProjectComponent.version}</version> 
</dependency> 

Так что, если вы создаете несколько профилей, вы можете переключаться между ними (см Maven ссылки)

Пример:

<profile> 
    <id>stable-builds</id> 
    <properties> 
     <group.ProjectComponent.version>1.0</group.ProjectComponent.version> 
    </properties> 
    <activation> 
     <activeByDefault>true</activeByDefault> 
    </activation> 
</profile> 

<profile> 
    <id>beta-builds</id> 
    <properties> 
     <group.ProjectComponent.version>2.0.Beta1</group.ProjectComponent.version> 
    </properties> 
    <activation> 
     <activeByDefault>false</activeByDefault> 
    </activation> 
</profile> 
+0

Спасибо! Вы случайно знаете, есть ли способ предоставить значение зависимости от mvn из командной строки? Или это потребует испортить поры? – Hippopotamus

+1

передать системное свойство «mvn clean test -Dmy.lib.version = 1.0-SNAPSHOT». Хотя вы можете это сделать, это может быть плохая идея, так как его легко заставить проект использовать произвольную версию зависимости, просто переопределив это свойство , –

+0

@Kal Спасибо, это именно то, что я решил сделать. – Hippopotamus

0

Только что наткнулся на это, поскольку я искал нечто подобное. В моем случае один и тот же код приложения повторно используется в разных стеках, что означает использование разных «драйверов» для доступа к данным. Хотя драйверы реализуют один и тот же интерфейс, они поступают из разных артефактов.

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