Agora que o maven-3 eliminou o suporte para <uniqueVersion> false </uniqueVersion> para artefatos de instantâneo, parece que você realmente precisa usar SNAPSHOTS com carimbo de data / hora. Especialmente m2eclipse, que usa maven 3 internamente parece ser afetado com ele, update-snapshots não funcionam quando os SNAPSHOTS não são únicos.
Antes, parecia uma prática recomendada definir todos os instantâneos como uniqueVersion = false
Agora, não parece um grande problema mudar para a versão com carimbo de data / hora, afinal eles são gerenciados por um repositório nexus central, que é capaz de deletar snapshots antigos em intervalos regulares.
O problema são as estações de trabalho do desenvolvedor local. Seu repositório local rapidamente cresce muito com instantâneos exclusivos.
Como lidar com esse problema?
No momento, vejo as seguintes soluções possíveis:
- Peça aos desenvolvedores para limpar o repositório em intervalos regulares (o que leva a muita frustração, pois leva muito tempo para excluir e ainda mais para baixar tudo o que é necessário)
- Configure algum script que exclua todos os diretórios SNAPSHOT do repositório local e peça aos desenvolvedores para executar esse script de vez em quando (melhor do que o primeiro, mas ainda leva algum tempo para executar e baixar os instantâneos atuais)
- use a dependência: plug-in purge-local-repository (tem problemas quando executado a partir do eclipse, devido a arquivos abertos, precisa ser executado a partir de cada projeto)
- configurar nexus em cada estação de trabalho e configurar um trabalho para limpar instantâneos antigos (melhor resultado, mas não quero manter mais de 50 servidores nexus, além disso, a memória está sempre apertada nas estações de trabalho do desenvolvedor)
- pare de usar SNAPSHOTS em tudo
Qual é a melhor maneira de evitar que seu repositório local ocupe espaço no disco rígido?
Atualizar:
Para verificar o comportamento e fornecer mais informações, eu configurei um pequeno servidor Nexus, construa dois projetos (aeb) e tente:
uma:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>de.glauche</groupId>
<artifactId>a</artifactId>
<version>0.0.1-SNAPSHOT</version>
<distributionManagement>
<snapshotRepository>
<id>nexus</id>
<name>nexus</name>
<url>http://server:8081/nexus/content/repositories/snapshots</url>
</snapshotRepository>
</distributionManagement>
</project>
b:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>de.glauche</groupId>
<artifactId>b</artifactId>
<version>0.0.1-SNAPSHOT</version>
<distributionManagement>
<snapshotRepository>
<id>nexus</id>
<name>nexus</name>
<url>http://server:8081/nexus/content/repositories/snapshots/</url>
</snapshotRepository>
</distributionManagement>
<repositories>
<repository>
<id>nexus</id>
<name>nexus</name>
<snapshots>
<enabled>true</enabled>
</snapshots>
<url>http://server:8081/nexus/content/repositories/snapshots/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>de.glauche</groupId>
<artifactId>a</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
Agora, quando eu usar o maven e executar "deploy" em "a", terei
a-0.0.1-SNAPSHOT.jar
a-0.0.1-20101204.150527-6.jar
a-0.0.1-SNAPSHOT.pom
a-0.0.1-20101204.150527-6.pom
no repositório local. Com uma nova versão de carimbo de data / hora cada vez que executo o destino de implantação. O mesmo acontece quando tento atualizar os Snapshots do servidor Nexus (feche o Projeto "a", exclua-o do repositório local, compilação "b")
Em um ambiente onde muitos instantâneos são construídos (pense no servidor hudson ...), o repositório local se enche de versões antigas rapidamente
Atualização 2:
Para testar como e por que isso está falhando, fiz mais alguns testes. Cada teste é executado para limpar tudo (de / glauche é excluído de ambas as máquinas e nexo)
- mvn deploy com maven 2.2.1:
o repositório local na máquina A contém snapshot.jar + snapshot-timestamp.jar
MAS: apenas um jar com carimbo de data / hora no nexo, os metadados lêem:
<?xml version="1.0" encoding="UTF-8"?>
<metadata>
<groupId>de.glauche</groupId>
<artifactId>a</artifactId>
<version>0.0.1-SNAPSHOT</version>
<versioning>
<snapshot>
<timestamp>20101206.200039</timestamp>
<buildNumber>1</buildNumber>
</snapshot>
<lastUpdated>20101206200039</lastUpdated>
</versioning>
</metadata>
- execute dependências de atualização (na máquina B) em m2eclipse (m3 final integrado) -> o repositório local tem snapshot.jar + snapshot-timestamp.jar :(
- execute o objetivo do pacote com maven externo 2.2.1 -> o repositório local tem snapshot.jar + snapshot-timestamp.jar :(
Ok, próxima tentativa com maven 3.0.1 (depois de remover todos os vestígios do projeto a)
repositório local na máquina A parece melhor, apenas um jar sem registro de data e hora
apenas um jar com carimbo de data / hora no nexo, os metadados lêem:
de.glauche a 0.0.1-SNAPSHOT
<snapshot> <timestamp>20101206.201808</timestamp> <buildNumber>3</buildNumber> </snapshot> <lastUpdated>20101206201808</lastUpdated> <snapshotVersions> <snapshotVersion> <extension>jar</extension> <value>0.0.1-20101206.201808-3</value> <updated>20101206201808</updated> </snapshotVersion> <snapshotVersion> <extension>pom</extension> <value>0.0.1-20101206.201808-3</value> <updated>20101206201808</updated> </snapshotVersion> </snapshotVersions>
execute dependências de atualização (na máquina B) em m2eclipse (m3 final integrado) -> o repositório local tem snapshot.jar + snapshot-timestamp.jar :(
execute o objetivo do pacote com maven externo 2.2.1 -> o repositório local tem snapshot.jar + snapshot-timestamp.jar :(
Então, para recapitular: o objetivo "implantar" no maven3 funciona melhor do que no 2.2.1, o repositório local na máquina de criação parece bom. Mas, o receptor sempre termina com muitas versões com data e hora ...
O que estou fazendo errado ?
Atualização 3
Eu também testei várias outras configurações, primeiro substitua nexus por artifactory -> mesmo comportamento. Em seguida, use os clientes Linux maven 3 para baixar os instantâneos do gerenciador de repositório -> o repositório local ainda tem instantâneos com carimbo de data / hora :(