Working with IntelliJ and a corporate Maven repository over HTTPS

Prérequis :

  • IntelliJ 14+
  • Maven 3
  • Sonatype Nexus (ou autre repo d’entreprise)

Config Maven locale :
~/.m2/settings.xml

 <mirrors>
        <mirror>
            <id>nexus-forge</id>
            <mirrorOf>*</mirrorOf>
            <name>Nexus (FORGE)</name>
            <url>https://forge.company/nexus/content/groups/public/</url>
        </mirror>
    </mirrors>
 <servers>
        <!-- Ajouter authentification sur Nexus Interne, si necessaire -->
        <server>
            <id>nexus-forge</id>
            <username>who</username>
            <password>ami</password>
        </server>        
    </servers>            

Si utilisation de HTTPS pour le serveur, configurer la Java Property « javax.net.ssl.trustStore ».

Par exemple sous Windows : « -Djavax.net.ssl.trustStore=C:\Users\<ME>\cacerts » • (rajouter à JAVA_OPTS, ou MAVEN_OPTS).

Dans IntelliJ, pour permettre de télécharger des librairies dans l’IDE :

File > Settings > … > Maven > Importing :
VM options for importer : rajouter -Djavax.net.ssl.trustStore=…\cacerts

Penser aussi à configurer l’exécution du build dans :

File > Settings > … > Maven > Runner:
VM Options : rajouter -Djavax.net.ssl.trustStore=…\cacerts

Normalement ensuite tout devrait bien se passer.

Références :

 

Publicités

Quelques repositories Maven utiles…

1. The first the one : Maven Central !

Moteur de recherche : http://search.maven.org/
Dépôt simple : http://repo1.maven.org/maven2/

2. Le repository de JBoss Community

Nexus Pro : https://repository.jboss.org/nexus/
Dépôt simple : https://repository.jboss.org/

3. Le repository pour JBoss Enterprise ou EAP

Dépôt « General availability repository » : https://maven.repository.redhat.com/techpreview/all/
où l’on trouvera les BOMs EAP avec le groupIp « org.jboss.bom.eap ». Voir aussi JBoss Stacks.

Configuration : https://community.jboss.org/wiki/SettingUpTheJBossEnterpriseRepositories

Pour EAP 6 notamment : Install the JBoss Enterprise Application Platform 6 Maven Repository 

4. Un autre moteur de recherche : MvnRepository

Ici : http://mvnrepository.com/

Avantages :

  • affichage des méta-données du POM
  • la liste des packages de la librairie
  • les livres associés

Doc générale sur les repositories

Site Apache Maven :

Sonatype :

Doc gestion des repositories avec Sonatype Nexus

Source : http://books.sonatype.com/nexus-book/reference/

 

Exclure des dépendances avec Maven en fonction de la version de Java

Il peut parfois être utile d’exclure certaines dépendances dans un projet Maven, pour éviter d’avoir des classes en doublons dans le classpath, et d’être assuré d’utiliser la bonne version de la classe.

Par exemple, si notre projet utilise une dépendance qui doit utiliser elle-même la dépendance transitive jaxb-api 2.0, on peut souhaiter exclure cette dernière dépendance qui est en fait incluse dans Java 6.

Pour ce faire, il existe plusieurs solutions :

  1. Exclure une dépendance dans la gestion des dépendances
  2. Utiliser un scope provided ou system sur la dépendance que l’on souhaite exclure (suivant qu’elle est embarquée par le container, ou incluse dans le JRE)

Enfin, pour s’assurer que l’on traite l’exclusion uniquement dans une version donnée de Java, on utilise le mécanisme des profiles Maven.

Exemple, pour exclure une API qui serait incluse dans Java 6 :

Dans ce cas on utilise un profile – extrait du 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/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<groupId>fr.husta.test</groupId>
	<artifactId>xml-jaxb2-schema-test</artifactId>
	<version>0.0.1-SNAPSHOT</version>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	</properties>

	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.1</version>
				<configuration>
					<!-- http://maven.apache.org/plugins/maven-compiler-plugin/ -->
					<source>1.6</source>
					<target>1.6</target>
				</configuration>
			</plugin>

			<!-- PLUGIN MAVEN-DUPLICATE-FINDER-PLUGIN -->
			<!-- https://github.com/ning/maven-duplicate-finder-plugin -->
			<plugin>
				<groupId>com.ning.maven.plugins</groupId>
				<artifactId>maven-duplicate-finder-plugin</artifactId>
				<version>1.0.4</version>
			</plugin>

		</plugins>
	</build>

	<dependencies>

		<!-- LIB PERSO pour TESTS -->
		<dependency>
			<groupId>fr.xxx.yyy</groupId>
			<artifactId>yyy-xml-jaxb2</artifactId>
			<version>1.0</version>
		</dependency>

	</dependencies>

	<profiles>
		<profile>
			<id>java6</id>
			<activation>
				<jdk>[1.6,)</jdk>
			</activation>
			<dependencies>
				<!-- JE VEUX EXCLURE JSR 173: STAX -->
				<dependency>
					<groupId>javax.xml.bind</groupId>
					<artifactId>jsr173_api</artifactId>
					<version>1.0</version>
					<scope>system</scope>
					<systemPath>${java.home}/lib/rt.jar</systemPath>
				</dependency>
				<!-- http://www.oracle.com/technetwork/java/javase/6u18-142093.html#stax1.2-1.6.0_18 -->
				<dependency>
					<groupId>stax</groupId>
					<artifactId>stax</artifactId>
					<version>1.2.0</version>
					<scope>system</scope>
					<systemPath>${java.home}/lib/rt.jar</systemPath>
				</dependency>
				<dependency>
					<groupId>stax</groupId>
					<artifactId>stax-api</artifactId>
					<version>1.0.1</version>
					<scope>system</scope>
					<systemPath>${java.home}/lib/rt.jar</systemPath>
				</dependency>
				<!-- JE VEUX EXCLURE JSR 222: JAXB 2.0 -->
				<dependency>
					<groupId>javax.xml.bind</groupId>
					<artifactId>jaxb-api</artifactId>
					<version>2.0</version>
					<scope>system</scope>
					<systemPath>${java.home}/lib/rt.jar</systemPath>
				</dependency>
			</dependencies>
		</profile>
	</profiles>

</project>

Références utiles :