Dépendances et releases avec nexus, maven et svn
1) Installer svn
Créer un repository avec à la racine trunk, branches, tags
2) Installer la webapp nexus
#!/bin/bash
cd /usr/local/mycompany/tomcat-cluster/instance0/webapps/ &&
wget http://nexus.sonatype.org/downloads/nexus-webapp-1.4.0.war &&
unzip -o nexus-webapp-1.4.0.war -d nexus && rm nexus-webapp-1.4.0.war &&
cat > /etc/httpd/conf.d/nexus.conf <<EOF
<VirtualHost *:80>
ServerName mvn.mycompany.fr
ServerAlias mvn.mycompany.net
ProxyPreserveHost On
ProxyPass / http://localhost:8080/nexus
ProxyPassReverse / http://localhost:8080/nexus
ErrorLog logs/nexus/error.log
CustomLog logs/nexus/access.log common
</VirtualHost>
EOF
/etc/init.d/httpd restart &&
/etc/init.d/tomcat restart
3) Configurer nexus
Editer les users, desactiver le user anonymous, changer le mot de passe admin.
Ajouter un compte avec le role developer et system feed
Verifer les path des stores de tous les serveurs et lancer la reindexation
Configurer le server de mail et désactiver l’accès anonyme
4) Créer le fichier $HOME/.m2/settings.xml sur les machines de dev
<settings>
<servers>
<server>
<id>mycompany-server</id>
<username>myuser</username>
<password>mypassword</password>
</server>
</servers>
<profiles>
<profile>
<id>developer</id>
<properties>
<!-- global properties -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- internal repositories informations -->
<snapshotsRepository.id>mycompany-server</snapshotsRepository.id>
<snapshotsRepository.name>mycompany snapshots repository</snapshotsRepository.name>
<snapshotsRepository.url>http://www.mycompagny.fr/nexus/content/repositories/snapshots</snapshotsRepository.url>
<repository.id>mycompany-server</repository.id>
<repository.name>mycompany releases repository</repository.name>
<repository.url>http://www.mycompagny.fr/nexus/content/repositories/releases</repository.url>
<!-- internal scm informations -->
<scm.url.tags>svn+ssh://www.mycompagny.fr/tags/releases</scm.url.tags>
</properties>
<repositories>
<repository>
<id>mycompany-server</id>
<url>http://www.mycompagny.fr/nexus/content/repositories/snapshots</url>
</repository>
<repository>
<id>mycompany-server</id>
<url>http://www.mycompagny.fr/nexus/content/groups/central</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>mycompany-server</id>
<url>http://www.mycompagny.fr/nexus/content/groups/central</url>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<activeProfiles>
<activeProfile>developer</activeProfile>
</activeProfiles>
</settings>
5) Créer un projet A sur la machine dev1
mvn archetype:create -DgroupId=test.maven -DartifactId=projectA -DarchetypeArtifactId=maven-archetype-archetype
Editer le pom.xml
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>test.maven</groupId>
<artifactId>projectA</artifactId>
<version>1.0-SNAPSHOT</version>
<name>Archetype - projectA</name>
<url>http://maven.apache.org</url>
<scm>
<connection>scm:svn:http://svn</connection>
</scm>
<distributionManagement>
<repository>
<id>${repository.id}</id>
<name>${repository.name}</name>
<url>${repository.url}</url>
</repository>
<snapshotRepository>
<id>${snapshotsRepository.id}</id>
<name>${snapshotsRepository.name}</name>
<url>${snapshotsRepository.url}</url>
<uniqueVersion>true</uniqueVersion>
</snapshotRepository>
</distributionManagement>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<configuration>
<tagBase>${scm.url.tags}/test</tagBase>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.14</version>
</dependency>
</dependencies>
</project>
6) Créer un projet B sur la machine dev2
mvn archetype:create -DgroupId=test.maven -DartifactId=projectB -DarchetypeArtifactId=maven-archetype-archetype
Editer le pom.xml
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>test.maven</groupId>
<artifactId>projectB</artifactId>
<version>1.0-SNAPSHOT</version>
<name>Archetype - projectB</name>
<url>http://maven.apache.org</url>
<scm>
<connection>scm:svn:http://svn</connection>
</scm>
<distributionManagement>
<repository>
<id>${repository.id}</id>
<name>${repository.name}</name>
<url>${repository.url}</url>
</repository>
<snapshotRepository>
<id>${snapshotsRepository.id}</id>
<name>${snapshotsRepository.name}</name>
<url>${snapshotsRepository.url}</url>
<uniqueVersion>true</uniqueVersion>
</snapshotRepository>
</distributionManagement>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<configuration>
<tagBase>${scm.url.tags}/test</tagBase>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>test.maven</groupId>
<artifactId>projectA</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
</project>
7) Faire une release, changer de version du projet…
# mvn release:prepare -Dresume=false
What is the release version for “Archetype - projectA”? (test.maven:projectA) 1.0: :
What is SCM release tag or label for “Archetype - projectA”? (test.maven:projectA) projectA-1.0: :
What is the new development version for “Archetype - projectA”? (test.maven:projectA) 1.1-SNAPSHOT: :
(va créer le tag sur svn et mettre à jour la version du projet)
# mvn release:perform
(va récupérer les dernières sources taggées, builder et uploader le jar sur le repository)
(c’est mortel)
Divers
# force la recupération des derniers snapshots
mvn -U compile
# Le flux rss qui notifie de toutes les releases/snapshots publiées
feed://www.mycompagny.fr/nexus/service/local/feeds/recentlyDeployedArtifacts