經過Maven發部項目的最實用配置

1、問題java

  咱們平時開發項目,使用Maven或者Idea部署,儘量是要作到自動化。通常狀況下,作成自動化的方式有多種,下面簡述我比較經常使用的3種。git

 

2、解決方案一:web

  (1)配置發部:使用IDEA自帶的Artifacts功能,先打開【File】菜單下的【Project Structure】菜單,點到【Artifacts】,按本身的項目類型添加一個類別,好比SpringBoot項目,能夠添加爲【JavaEE Application Exploded】項,起個名稱,而後在要發部的右側的【Available Element】列表列出的微服務或者主模塊上,右擊選擇【Put Into Output Root】,而後點擊【Apply】並點擊【OK】保存。spring

  (2)執行發部:配置完後,執行IDEA主菜單頂部的【Build】-【Build Artifacts...】-【Rebuild All】,編譯完成後,將自動發部到項目根目錄下的out/artifacts/xxx目錄下。docker

  (3)發部運行:發部運行的方式,有不少種,好比最簡單的方法之一是,使用IDEA自帶的【Tools】-【Deployment】-【Deployment】中配置遠程FTP服務器,或者配置SSH鏈接,用於一鍵發部文件到生產環境上指定目錄下。而後配置一個Dockerfile和一個start.sh角本,並經過"docker build -t myapp:v1 ."命令事先部署部署一個DockerSwarm或者Docker程序。把程序文件映射到遠程服務器的物理磁盤上。而後經過前面的IDEA的配置配置到FTP該目錄。這樣就能夠一鍵自動發部項目了。缺點是通常IDEA的配置不會提交到GIT裏,因此若是有同事須要發部,還得使用你的電腦,或者他本身電腦上也作相同的配置,來發部項目。apache

FROM openjdk:8-jre
MAINTAINER songxingzhu
WORKDIR /app
ADD ./ /app/
ENV JAVA_OPTS "-Xms400m -Xmx3g"
ENV spring.profiles.active test
ENV file.encoding UTF-8
EXPOSE 8081
RUN chmod 777 /app/start.sh
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo 'Asia/Shanghai' >/etc/timezone
ENTRYPOINT ["/app/start.sh"]

 

2、解決方案二:api

  (1)配置發部:在要發部的模塊的pom.xml中,添加下列代碼:服務器

    <build>
        <finalName>service-webapi</finalName>
        <sourceDirectory>src/main/java</sourceDirectory>
        <plugins>
            <!-- 設置源文件編碼方式 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <!-- 打包jar文件時,配置manifest文件,加入lib包的jar依賴 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <classpathPrefix>lib/</classpathPrefix>
                            <mainClass>com.test.webapi.WebApiApplication</mainClass>
                        </manifest>
                    </archive>
                    <outputDirectory>${project.build.directory}/classes</outputDirectory>
                    <excludes>
                        <exclude>*.properties</exclude>
                        <exclude>*.xml</exclude>
                        <exclude>*.sh</exclude>
                    </excludes>
                </configuration>
            </plugin>
            <!-- 拷貝依賴的jar包到lib目錄 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <executions>
                    <execution>
                        <id>copy-dependencies</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${project.build.directory}/classes/lib</outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <!-- 解決資源文件的編碼問題 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <version>3.1.0</version>
                <configuration>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
        </plugins>
    </build>

 

  (2)執行發部:在項目目錄下,執行 mvn package 便可,編譯完後,代碼會出如今相應的模塊的/target/classes目錄下(發部到此目錄的緣由是,這樣就不會影響IDEA的正常使用) 。若是要跳過測試,能夠在父模塊或者相應的模塊的pom.xml中,添加下列內容,便可實現:app

            <!--編譯插件-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.0</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                    <skip>true</skip>
                </configuration>
            </plugin>
            <!--跳過測試-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <skipTests>true</skipTests>
                </configuration>
            </plugin>

  (3)發部運行:同上。maven

 

3、解決方案三:

  方案三,使用Gitlab的CICD(須要Gitlab安裝gitlab-runner)或者使用Jenkins,結合Docker來作。由於平時作的最多客戶通常都不太願意提供服務器部署Kubernetes,因此我通常會用Docker Swarm來作,簡單方便又輕量級。使用CICD的DevOps模式比較推薦,團隊每一個人只要Merge一下代碼到指定分支,便可完成自動化編譯、測試、發部部署,由於也不復雜,我這裏時間緊張就不描述了。

 

4、解決方案四:

  方案四,配置IDEA+Docker實現。在IDEA中默認安裝了Docker插件,所以能夠直接在Dockerfile執行運行,並配置一下Dockerfile的鏡像編譯命令和遠程Docker中開啓遠程訪問便可。

相關文章
相關標籤/搜索