Votre référentiel maven sur GitHub

Les développeurs peuvent télécharger leur bibliothèque sur GitHub, pour laquelle il dispose d'un plugin site-maven-plugin spécial . Regardons un exemple de son utilisation :

<project>
    <properties>
        <github.global.server>github</github.global.server>
        <github.maven-plugin>0.9</github.maven-plugin>
    </properties>
 
    <distributionManagement>
    	<repository>
            <id>internal.repo</id>
        	<name>Temporary Staging Repository</name>
            <url>file://${project.build.directory}/mvn-repo</url>
    	</repository>
    </distributionManagement>
 
    <build>
    	<plugins>
        	<plugin>
                <artifactId>maven-deploy-plugin</artifactId>
    	        <version>2.8.1</version>
            	<configuration>
                    <altDeploymentRepository>
                        internal.repo::default::file://${project.build.directory}/mvn-repo
                    </altDeploymentRepository>
            	</configuration>
        	</plugin>
        	<plugin>
                <groupId>com.github.github</groupId>
                <artifactId>site-maven-plugin</artifactId>
                <version>${github.maven-plugin}</version>
            	<configuration>
                	<message>Maven artifacts for ${project.version}</message>
                    <noJekyll>true</noJekyll>
                    <outputDirectory>${project.build.directory}/mvn-repo</outputDirectory>
                	<branch>refs/heads/mvn-repo</branch>
                    <includes>**/*</includes>
                	<repositoryName>SuperLibrary</repositoryName>
                	<repositoryOwner>codegymu-student</repositoryOwner>
            	</configuration>
            	<executions>
                	<execution>
                    	<goals>
                            <goal>site</goal>
                    	</goals>
                        <phase>deploy</phase>
                	</execution>
            	</executions>
        	</plugin>
    	</plugins>
    </build>
 
</project>

Voyons ce qui est écrit ici.

La création d'un référentiel local temporaire est surlignée en bleu. Techniquement, c'est juste un dossier, mais nous avons besoin que Maven le traite comme un référentiel séparé.

Nous avons surligné en rouge le lancement du plugin maven-deploy-plugin , où nous avons indiqué que la bibliothèque compilée devait être placée dans ce référentiel temporaire.

Et enfin, le plugin site-maven-plugin est surligné en vert , ce qui devrait prendre tous les fichiers du référentiel et les valider sur GitHub. Quelques explications sont nécessaires ici. Tous les paramètres sont divisés en deux groupes : quoi remplir et où remplir.

Ce que nous remplissons :
  • outputDirectory - répertoire où obtenir les fichiers pour la validation
  • inclut - définit le masque des fichiers à valider
Où téléchargeons-nous :
  • repositoryOwner - le nom du propriétaire du référentiel sur GitHub
  • repositoryName - nom du référentiel
  • branch - définit la branche du référentiel sur GitHub dans laquelle s'engager
  • message - le message qui sera ajouté lors de la validation

Vous devez également spécifier le login et le mot de passe de votre référentiel dans Maven setting.xml :

<settings>
  <servers>
    <server>
  	<id>github</id>
      <username>[username]</username>
      <password>[password]</password>
    </server>
  </servers>
</settings>

Pour connecter (utiliser) une bibliothèque d'un dépôt GitHub à un autre projet, vous devez spécifier ce dépôt dans votre pom.xml :

<repositories>
    <repository>
        <id>[name-project]-mvn-repo</id>
        <url>https://raw.github.com/[username]/[name-project]/mvn-repo/</url>
    	<snapshots>
            <enabled>true</enabled>
            <updatePolicy>always</updatePolicy>
    	</snapshots>
	</repository>
</repositories>

Après cela, Maven comprendra d'où vient la bibliothèque.

  • [name-project] est le nom du projet, dans notre cas SuperLibrary
  • [username] est le login sur GitHub, dans l'exemple c'est codegym-user

Emballage de l'assembly dans une image Docker

Nous vivons dans une nouvelle époque, où les projets résultant de l'assemblage peuvent être placés dans le référentiel Maven, ou peut-être dans le stockage Docker.

Pour faire des amis Maven et Docker, nous avons besoin du plugin docker-maven-plugin . Rien de compliqué :

  <build>
    <plugins>
  	  <plugin>
        <groupId>com.spotify</groupId>
        <artifactId>docker-maven-plugin</artifactId>
    	<version>0.4.10</version>
    	<configuration>
          <dockerDirectory>${project.basedir}</dockerDirectory>
      	  <imageName>codegym/${project.artifactId}</imageName>
    	</configuration>
    	<executions>
      	  <execution>
            <phase>package</phase>
        	<goals>
          	<goal>build</goal>
        	</goals>
      	  </execution>
    	</executions>
  	  </plugin>
    </plugins>
  </build>

Surligné en bleu est le point où nous avons ajouté l'objectif construit à la phase de package de la construction. Il peut être appelé avec la commande mvn docker:build .

La balise dockerDirectory spécifie le dossier où se trouve le Dockerfile. Et le nom de l'image est défini à l'aide de la balise imageName .

Si le projet est empaqueté dans un fichier jar, le fichier docker ressemblera à ceci :

FROM java:11
EXPOSE 8080
ADD /target/demo.jar demo.jar
ENTRYPOINT ["java","-jar","demo.jar"]

Si vous empaquetez une application Web, vous devrez peut-être ajouter Tomcat :

FROM tomcat8
ADD sample.war ${CATALINA_HOME}/webapps/ROOT.war
CMD ${CATALINA_HOME}/bin/catalina.sh run