你在 GitHub 上的 Maven 仓库

开发人员可以将他们的库上传到 GitHub,为此它有一个特殊的site-maven-plugin 插件。让我们看一下它的使用示例:

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

让我们看看这里写了什么。

临时本地存储库的创建以蓝色突出显示。从技术上讲,它只是一个文件夹,但我们需要 Maven 将其视为一个单独的存储库。

我们用红色突出显示了 maven-deploy-plugin 插件的启动,我们指出编译后的库应该放在这个临时存储库中。

最后,site-maven-plugin 插件以绿色突出显示,它应该从存储库中获取所有文件并将它们提交到 GitHub。这里需要一些解释。所有参数分为两组:填充什么和在哪里填充。

我们填写的内容:
  • outputDirectory - 获取提交文件的目录
  • includes - 设置要提交的文件的掩码
我们在哪里上传:
  • repositoryOwner - GitHub 上的存储库所有者的名称
  • repositoryName - 存储库名称
  • branch - 在 GitHub 上设置要提交的存储库分支
  • message - 提交时将添加的消息

您还需要在 Maven setting.xml中为您的存储库指定登录名和密码:

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

要将 GitHub 存储库中的库连接(使用)到另一个项目,您需要在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>

之后,Maven 将了解从哪里获取库。

  • [name-project]是项目的名称,在我们的例子中是 SuperLibrary
  • [username]是 GitHub 上的登录名,示例中是 codegym-user

将程序集打包到 Docker 镜像中

我们生活在一个新时代,组装后的项目可以放在 Maven 存储库中,或者可能放在 docker 存储中。

为了使 Maven 和 Docker 成为朋友,我们需要docker-maven-plugin 插件。没什么复杂的:

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

以蓝色突出显示的是我们将目标构建添加到构建的包阶段的位置。可以使用mvn docker:build命令调用它。

dockerDirectory标签指定 Dockerfile 所在的文件夹。图像的名称是使用imageName标签设置的。

如果项目被打包在一个 jar 文件中,那么 docker 文件将如下所示:

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

如果您正在打包 Web 应用程序,那么您可能需要添加 Tomcat:

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