Uw maven-repository op GitHub

Ontwikkelaars kunnen hun bibliotheek uploaden naar GitHub, waarvoor het een speciale site-maven-plug-in heeft . Laten we eens kijken naar een voorbeeld van het gebruik ervan:

<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>

Laten we eens kijken wat hier staat.

Het maken van een tijdelijke lokale repository is blauw gemarkeerd. Technisch gezien is het gewoon een map, maar we hebben Maven nodig om het als een aparte repository te behandelen.

We hebben de lancering van de plug-in maven-deploy-plugin rood gemarkeerd , waarbij we hebben aangegeven dat de gecompileerde bibliotheek in deze tijdelijke repository moet worden geplaatst.

En tot slot is de plug-in site-maven-plugin groen gemarkeerd , die alle bestanden uit de repository zou moeten nemen en ze naar GitHub zou moeten committen. Enige uitleg is hier nodig. Alle parameters zijn verdeeld in twee groepen: wat te vullen en waar te vullen.

Wat vullen wij in:
  • outputDirectory - directory waar bestanden voor commit kunnen worden opgehaald
  • omvat - stelt het masker van bestanden in om vast te leggen
Waar uploaden we:
  • repositoryOwner - de naam van de eigenaar van de repository op GitHub
  • repositoryName - naam van de repository
  • branch - stelt de repository branch op GitHub in waarnaar gecommit moet worden
  • bericht - het bericht dat zal worden toegevoegd bij het vastleggen

U moet ook de login en het wachtwoord voor uw repository opgeven in Maven setting.xml :

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

Om een ​​bibliotheek van een GitHub-repository te verbinden (gebruiken) met een ander project, moet u deze repository specificeren in uw 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>

Daarna zal Maven begrijpen waar hij de bibliotheek vandaan kan halen.

  • [name-project] is de naam van het project, in ons geval SuperLibrary
  • [gebruikersnaam] is de login op GitHub, in het voorbeeld is dat codegym-gebruiker

De assembly verpakken in een Docker-image

We leven in een nieuwe tijd, waarin projecten als resultaat van de assemblage in de Maven-repository kunnen worden geplaatst, of misschien in docker-opslag.

Om Maven en Docker vrienden te maken, hebben we de plug-in docker-maven-plug-in nodig . Niets ingewikkelds:

  <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>

Blauw gemarkeerd is het punt waar we het doel hebben toegevoegd aan de pakketfase van de build. Het kan worden aangeroepen met de opdracht mvn docker:build .

De tag dockerDirectory specificeert de map waarin de Dockerfile zich bevindt. En de naam van de afbeelding wordt ingesteld met behulp van de tag imageName .

Als het project is verpakt in een jar-bestand, ziet het docker-bestand er ongeveer zo uit:

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

Als u een webtoepassing verpakt, moet u mogelijk Tomcat toevoegen:

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