Skip to content

Maven源配置及常用工程配置示例

1390字约5分钟

2023-12-06

代理仓库配置

  <mirrors>
    <!-- 配置阿里云代理仓库
    <mirror>
        <id>aliyunmaven</id>
        <mirrorOf>*</mirrorOf>
        <name>阿里云公共仓库</name>
        <url>https://maven.aliyun.com/repository/public</url>
    </mirror>
    -->
    <!-- 配置个人私服 -->
    <mirror>
        <id>maven-public</id>
        <mirrorOf>*</mirrorOf>
		<url>https://test-mvc.kdaiyu.cn/repository/maven-public/</url>
    </mirror>
</mirrors>

私服账号配置

  <servers>
    <!-- id的名字要和 distributionManagement 中repository的id一致 -->
    <server>
		<id>maven-releases</id>
		<username>admin</username>
		<password>8ee56366</password>
	</server>
	 
	<server>
		<id>maven-snapshots</id>
		<username>dev</username>
		<password>123456</password>
	</server>
  </servers>

配置构建插件

<build>
    <resources>
        <resource>
            <filtering>true</filtering> <!-- 替换文件中的内容 -->
            <directory>src/main/resources</directory>
            <includes>
                <!-- 配置文件全部放nacos配置中心,只保留程序启动连接nacos配置信息 -->
                <include>bootstrap.yaml</include>
            </includes>
        </resource>
    </resources>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>${project.compiler.plugin.version}</version>
            <configuration>
                <source>${java.version}</source>
                <target>${java.version}</target>
                <encoding>${project.build.sourceEncoding}</encoding>
            </configuration>
        </plugin>

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <configuration>
                <!-- maven进行配置信息替换时跳过文件类型 -->
                <nonFilteredFileExtensions>
                    <nonFilteredFileExtension>pfx</nonFilteredFileExtension>
                    <nonFilteredFileExtension>pdf</nonFilteredFileExtension>
                    <nonFilteredFileExtension>txt</nonFilteredFileExtension>
                </nonFilteredFileExtensions>
            </configuration>
        </plugin>
    </plugins>
</build>

替换配置文件内容,跳过install和deploy

<build>
    <filters>
        <!-- 按环境替换配置文件中的变量 -->
        <filter>${basedir}/src/main/resources/bootstrap.yaml</filter>
    </filters>
    <plugins>
        <!-- springboot 项目打包必备,不能删除 -->
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>${spring-boot.version}</version>
        </plugin>
		<!-- deploy 跳过,一般用在不需要部署到私服仓库的模块 -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-deploy-plugin</artifactId>
            <configuration>
                <skip>true</skip>
            </configuration>
        </plugin>
        <!-- install 跳过,一般用不需要安装到本地仓库的模块 -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-install-plugin</artifactId>
            <configuration>
                <skip>true</skip>
            </configuration>
        </plugin>
    </plugins>
</build>

完整的多模块,多环境配置示例

<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/maven-v4_0_0.xsd">
  <name>kdaiyu-cloud</name>

  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.6.14</version>
    <relativePath/>
  </parent>

  <modelVersion>4.0.0</modelVersion>

  <modules>
    <module>../kdaiyu-common</module>
    <module>../kdaiyu-main</module>
    <module>../kdaiyu-doctor</module>
    <module>../kdaiyu-hospital</module>
    <module>../kdaiyu-gateway</module>
    <module>../kdaiyu-finance</module>
  </modules>

  <groupId>com.accurad.amol</groupId>
  <artifactId>kdaiyu-cloud</artifactId>
  <packaging>pom</packaging>
  <version>1.0</version>
  <!-- 按环境定义变量值 -->
  <profiles>
    <profile>
      <!-- 本地开发环境,只替换配置信息,不做文件剔除 -->
      <id>dev</id>
      <activation>
        <activeByDefault>true</activeByDefault>
      </activation>
      <properties>
        <springbooot.devtool.scope>runtime</springbooot.devtool.scope>
        <spring.profiles.active>dev</spring.profiles.active>
        <nacos.namespace.id>NACOS-NAMESPACE-ID-kdaiyu-DEV</nacos.namespace.id>
        <kdaiyu.common.basic.version>1.0-SNAPSHOT</kdaiyu.common.basic.version>
        <kdaiyu.common.api.version>1.0-SNAPSHOT</kdaiyu.common.api.version>
        <kdaiyu.common.web.version>1.0-SNAPSHOT</kdaiyu.common.web.version>
        <kdaiyu.common.entity.version>1.0-SNAPSHOT</kdaiyu.common.entity.version>
      </properties>
      <build>
        <resources>
          <resource>
            <filtering>true</filtering>
            <directory>src/main/resources</directory>
          </resource>
        </resources>
      </build>
    </profile>

    <profile>
      <!-- 测试环境 -->
      <id>test</id>
      <properties>
        <springbooot.devtool.scop>provided</springbooot.devtool.scop>
        <spring.profiles.active>dev</spring.profiles.active>
        <nacos.namespace.id>NACOS-NAMESPACE-ID-kdaiyu-DEV</nacos.namespace.id>
        <kdaiyu.common.basic.version>1.0-SNAPSHOT</kdaiyu.common.basic.version>
        <kdaiyu.common.api.version>1.0-SNAPSHOT</kdaiyu.common.api.version>
        <kdaiyu.common.web.version>1.0-SNAPSHOT</kdaiyu.common.web.version>
        <kdaiyu.common.entity.version>1.0-SNAPSHOT</kdaiyu.common.entity.version>
      </properties>
      <build>
        <resources>
          <resource>
            <filtering>true</filtering>
            <directory>src/main/resources</directory>
            <includes>
              <!-- 配置文件全部放nacos配置中心,只保留程序启动连接nacos配置信息 -->
              <include>bootstrap.yaml</include>
            </includes>
          </resource>
        </resources>
      </build>
    </profile>

    <profile>
      <!-- 生产环境 -->
      <id>prod</id>
      <properties>
        <springbooot.devtool.scop>provided</springbooot.devtool.scop>
        <spring.profiles.active>prod</spring.profiles.active>
        <nacos.namespace.id>NACOS-NAMESPACE-ID-kdaiyu-PRO</nacos.namespace.id>
        <kdaiyu.common.basic.version>1.0-release</kdaiyu.common.basic.version>
        <kdaiyu.common.api.version>1.0-release</kdaiyu.common.api.version>
        <kdaiyu.common.web.version>1.0-release</kdaiyu.common.web.version>
        <kdaiyu.common.entity.version>1.0-release</kdaiyu.common.entity.version>
      </properties>
      <build>
        <resources>
          <resource>
            <filtering>true</filtering>
            <directory>src/main/resources</directory>
            <includes>
              <include>bootstrap.yaml</include>
            </includes>
          </resource>
        </resources>
      </build>
    </profile>
  </profiles>
 
  <!-- 全局公共配置 -->
  <properties>
    <kdaiyu.versoin>1.0</kdaiyu.versoin>
    <java.version>1.8</java.version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <project.compiler.plugin.version>3.8.1</project.compiler.plugin.version>
    <aliyun-spring-boot.version>1.0.0</aliyun-spring-boot.version>
    <spring-boot.version>2.6.14</spring-boot.version>
    <spring-cloud.versoin>2021.0.8</spring-cloud.versoin>
    <spring-cloud-alibaba.version>2021.0.5.0</spring-cloud-alibaba.version>
    <hutool.version>5.8.18</hutool.version>
    <mybatis-flex.version>1.5.6</mybatis-flex.version>
    <mybatis.version>2.2.2</mybatis.version>
    <maven.repository.url>https://test-mvc.kdaiyu.cn/repository</maven.repository.url>
    <maven.test.skip>true</maven.test.skip>
    <!-- nacos 配置,生产环境需要替换为有权限读写账号 -->
    <nacos.user.name>nacos_dev</nacos.user.name>
    <nacos.user.password>nacos_dev123</nacos.user.password>
    <nacos.server.address>192.168.10.48:8848</nacos.server.address>
  </properties>

  <dependencies>
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <optional>true</optional>
    </dependency>
  <!-- 只添加核心工具包,其他工具按需在子模块pom.xml中添加-->
    <dependency>
      <groupId>cn.hutool</groupId>
      <artifactId>hutool-core</artifactId>
      <!-- Java工具集:https://doc.hutool.cn/pages/index/ -->
    </dependency>
    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-lang3</artifactId>
    </dependency>
    <dependency>
      <groupId>commons-collections</groupId>
      <artifactId>commons-collections</artifactId>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <!-- 管理版本依赖,此次写明版本号在子模块dependencies,子模块中按需引入 -->
  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-dependencies</artifactId>
        <version>${spring-boot.version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>

      <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-dependencies</artifactId>
        <version>${spring-cloud.versoin}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>

      <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-alibaba-dependencies</artifactId>
        <version>${spring-cloud-alibaba.version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>

      <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>aliyun-spring-boot-dependencies</artifactId>
        <version>${aliyun-spring-boot.version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>

      <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>${mybatis.version}</version>
      </dependency>

      <!-- 工具包,各种util包,参考文档 https://doc.hutool.cn/pages/index/ -->
      <dependency>
        <groupId>cn.hutool</groupId>
        <artifactId>hutool-bom</artifactId>
        <version>${hutool.version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
      <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.83</version>
      </dependency>
      <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
        <version>3.7</version>
      </dependency>
      <dependency>
        <groupId>commons-collections</groupId>
        <artifactId>commons-collections</artifactId>
        <version>3.2</version>
      </dependency>
      <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <version>2.5</version>
      </dependency>

      <dependency>
        <groupId>io.jsonwebtoken</groupId>
        <artifactId>jjwt</artifactId>
        <version>0.9.1</version>
      </dependency>

      <dependency>
        <groupId>com.mybatis-flex</groupId>
        <artifactId>mybatis-flex-spring-boot-starter</artifactId>
        <version>${mybatis-flex.version}</version>
      </dependency>

      <dependency>
        <groupId>com.mybatis-flex</groupId>
        <artifactId>mybatis-flex-processor</artifactId>
        <version>${mybatis-flex.version}</version>
      </dependency>

      <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid-spring-boot-starter</artifactId>
        <version>1.2.15</version>
      </dependency>

      <dependency>
        <groupId>com.github.pagehelper</groupId>
        <artifactId>pagehelper</artifactId>
        <version>5.3.2</version>
      </dependency>
    </dependencies>
  </dependencyManagement>

  <repositories>
    <repository>
      <id>maven-public</id>
      <url>${maven.repository.url}/maven-public/</url>
      <releases>
        <enabled>true</enabled>
      </releases>
      <snapshots>
        <enabled>true</enabled>
      </snapshots>
    </repository>
  </repositories>

  <pluginRepositories>
    <pluginRepository>
        <id>maven-public</id>
        <url>${maven.repository.url}/maven-public/</url>
        <releases>
          <enabled>true</enabled>
        </releases>
        <snapshots>
          <enabled>true</enabled>
        </snapshots>
      </pluginRepository>
  </pluginRepositories>

  <distributionManagement>
    <repository>
      <id>maven-releases</id>
      <url>${maven.repository.url}/maven-releases/</url>
    </repository>
    <snapshotRepository>
      <id>maven-snapshots</id>
      <url>${maven.repository.url}/maven-snapshots/</url>
    </snapshotRepository>
  </distributionManagement>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>${project.compiler.plugin.version}</version>
        <configuration>
          <source>${java.version}</source>
          <target>${java.version}</target>
          <encoding>${project.build.sourceEncoding}</encoding>
        </configuration>
      </plugin>
      
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-resources-plugin</artifactId>
        <configuration>
          <!-- maven进行配置信息替换时跳过文件类型 -->
          <nonFilteredFileExtensions>
            <nonFilteredFileExtension>pfx</nonFilteredFileExtension>
            <nonFilteredFileExtension>pdf</nonFilteredFileExtension>
            <nonFilteredFileExtension>txt</nonFilteredFileExtension>
          </nonFilteredFileExtensions>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

配置文件替换

## 除nacos配置以外走线上nacos配置中心,本地开发调试可在当前文件修改覆盖。
spring:
  application:
    name: @project.name@
  profiles:
    active: @spring.profiles.active@
  cloud:
    nacos:
      server-addr: @nacos.server.address@
      username: @nacos.user.name@
      password: @nacos.user.password@
      config:
        file-extension: yaml
        namespace: @nacos.namespace.id@
        name: finance
        group: FIN_GROUP
        shared-configs:  # 共享配置
          - {data-id: kdaiyu-app.yaml, group: DEFAULT_GROUP, refresh: true}
      
#        extension-configs: # 扩展配置
#          - { data-id: finance-xxxx.yaml, group: FIN_GROUP, refresh: true }

      discovery:
        server-addr: @nacos.server.address@
        namespace: @nacos.namespace.id@
        group: kdaiyu_GROUP

陕ICP备2021014644号-1