Вопрос о мавене - PullRequest
       3

Вопрос о мавене

1 голос
/ 28 июля 2010

Почему maven загружает зависимости из хранилища, даже если jar существует в моем локальном хранилище (одной из причин может быть то, что у jar нет pom), есть ли способ обойти это, кроме как с опцией -o?

Ответы [ 2 ]

2 голосов
/ 29 июля 2010

Почему maven загружает зависимости [SNAPSHOT] из хранилища, даже если в моем локальном хранилище существует jar

Потому что это ожидаемое поведение с зависимостями SNASPSHOT. В отличие от фиксированных версий, Maven будет периодически пытаться загрузить самую последнюю версию данного SNAPSHOT. Это очень полезно, когда вы зависите от проекта, который находится в стадии активной разработки. Из Maven Reference :

3.3.1.2. Версии SNAPSHOT

Версии Maven могут содержать строку буквально означает, что проект В настоящее время активно развивается. Если версия содержит строку «SNAPSHOT», тогда Maven расширится этот токен для значения даты и времени преобразован в UTC (координируется Universal Time) при установке или выпустить этот компонент. Например, если ваш проект имеет версию «1.0-SNAPSHOT», и вы развернете это артефакты проекта Maven хранилище, Maven будет расширять это версия «1.0-20080207-230803-1», если вы должны были развернуть релиз в 11:08 PM 7 февраля 2008 г. UTC. В других словами, когда вы развертываете снимок, вы не делают релиз программного обеспечения составная часть; вы выпускаете снимок компонента в определенном время.

Зачем вам это использовать? СНАПШОТ версии используются для проектов под активное развитие. Если ваш проект зависит от программного компонента, который находится в стадии активной разработки, вы можете зависит от релиза SNAPSHOT, и Maven будет периодически пытаться загрузить последний снимок с хранилище при запуске сборки. Точно так же, если следующий выпуск вашего Система будет иметь версию «1.4», ваш проект будет иметь версия "1.4-SNAPSHOT" пока не было официально выпущен.

По умолчанию Maven не будет проверить релизы SNAPSHOT на удаленном Хранилища. Зависеть от SNAPSHOT релизы, пользователи должны явно включить возможность загрузки снимков используя repository или pluginRepository элемент в ПОМ.

Выпуская проект, вы должны разрешить все зависимости от SNAPSHOT версии к зависимостям от выпущенных версии. Если проект зависит от SNAPSHOT, он не стабилен как зависимости могут меняться со временем. Артефакты, опубликованные без снимка Репозитории Maven, такие как http://repo1.maven.org/maven2 не может зависит от версий SNAPSHOT, так как Супер POM Maven имеет снимок отключен из центрального хранилища. Версии SNAPSHOT для разработки только.

Если вы действительно хотите изменить это поведение, вы можете изменить updatePolicy вашего репозитория с поддержкой моментальных снимков:

<repositories>
  <repository>
    <id>my-repo</id>
    <name>My Corporate Repository</name>
    <url>http://repo.mycompany.com/maven2</url>
    <layout>default</layout>
    ...
    <snapshots>
      <enabled>true</enabled>
      <updatePolicy>never</updatePolicy>
      <checksumPolicy>fail</checksumPolicy>
    </snapshots>
  </repository>

Переключение на never заставит вас использовать ручное обновление (используя mvn -U). Но будьте осторожны, обычно это не то, чего люди хотят и ожидают от SNAPSHOT.

Для справки, Maven 3 имеет параметр командной строки -nsu, --no-snapshot-updates, позволяющий Подавлять обновления SNAPSHOT .

Смотри также

0 голосов
/ 28 июля 2010

Вы можете создать pom в вашем локальном хранилище, установив файл вручную:

mvn install:install-file 
    -Dfile=[FILE]
    -DgroupId=[GROUP]
    -DartifactId=[ARTIFACT]
    -Dversion=[VERSION]
    -Dpackaging=jar 
    -DgeneratePom=true
    -DcreateChecksum=true   

РЕДАКТИРОВАТЬ: Вы не хотели бы делать это для снимков.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...