一个是生产打包的时候, 一个是本地测试启动的时候,maven如何配置?

在Maven项目中,使用两套不同的pom.xml配置分别用于生产打包和本地测试启动是常见需求,尤其当你需要调整依赖范围、插件配置或使用不同资源文件时。Maven通过profiles和activeProfiles提供了灵活的配置管理方案,允许你为不同的环境或构建场景定义特定的配置集。

下面是如何利用Maven profiles来满足你的需求:

1. 定义 Profiles

pom.xml文件中添加<profiles>标签,并在其中定义两个profiles,分别命名为productiontest

xml 复制代码
<project>
    ...
    <profiles>
        <profile>
            <id>production</id>
            <!-- 生产环境配置 -->
            <dependencies>
                <!-- 生产环境特有的依赖 -->
                <dependency>
                    <groupId>...</groupId>
                    <artifactId>...</artifactId>
                    <version>...</version>
                    <scope>provided</scope>
                </dependency>
            </dependencies>
            <build>
                <plugins>
                    <!-- 生产环境特有的插件配置 -->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-jar-plugin</artifactId>
                        <configuration>
                            <archive>
                                <manifest>
                                    <addClasspath>true</addClasspath>
                                    <classpathPrefix>lib/</classpathPrefix>
                                    <mainClass>com.example.MainClass</mainClass>
                                </manifest>
                            </archive>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <profile>
            <id>test</id>
            <!-- 测试环境配置 -->
            <dependencies>
                <!-- 测试环境特有的依赖 -->
                <dependency>
                    <groupId>junit</groupId>
                    <artifactId>junit</artifactId>
                    <version>4.12</version>
                    <scope>test</scope>
                </dependency>
            </dependencies>
            <build>
                <plugins>
                    <!-- 测试环境特有的插件配置 -->
                    <plugin>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-maven-plugin</artifactId>
                        <executions>
                            <execution>
                                <goals>
                                    <goal>repackage</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>
    ...
</project>

2. 指定 Active Profiles

要激活某个profile,你可以在Maven命令行中使用-P参数来指定,例如:

  • 激活生产环境配置

    bash 复制代码
    mvn clean package -Pproduction
  • 激活测试环境配置

    bash 复制代码
    mvn clean test -Ptest

3. 默认 Profile

如果你希望在没有指定-P参数时,默认激活某个profile,可以在<profiles>标签中使用<activation>元素:

xml 复制代码
<profiles>
    <profile>
        <id>default</id>
        <!-- 默认配置 -->
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <!-- 默认配置的内容 -->
    </profile>
    <!-- 其他 profiles -->
</profiles>

这样,如果没有显式激活其他profiles,default profile将被自动激活。

4. 使用条件激活

你还可以根据环境变量、操作系统或其他条件来自动激活某个profile:

xml 复制代码
<profile>
    <id>production</id>
    <!-- 生产环境配置 -->
    <activation>
        <property>
            <name>env</name>
            <value>prod</value>
        </property>
    </activation>
</profile>

以上配置表示,当环境变量env的值为prod时,production profile将被激活。

通过这种方式,你可以轻松地在不同的构建场景下切换Maven的配置,确保生产打包和本地测试启动时使用最合适的依赖和插件设置。

相关推荐
cike_y2 小时前
Mybatis之解析配置优化
java·开发语言·tomcat·mybatis·安全开发
是一个Bug3 小时前
Java基础50道经典面试题(四)
java·windows·python
Slow菜鸟3 小时前
Java基础架构设计(三)| 通用响应与异常处理(分布式应用通用方案)
java·开发语言
我是Superman丶4 小时前
《Spring WebFlux 实战:基于 SSE 实现多类型事件流(支持聊天消息、元数据与控制指令混合传输)》
java
廋到被风吹走4 小时前
【Spring】常用注解分类整理
java·后端·spring
是一个Bug4 小时前
Java基础20道经典面试题(二)
java·开发语言
Z_Easen4 小时前
Spring 之元编程
java·开发语言
leoufung4 小时前
LeetCode 373. Find K Pairs with Smallest Sums:从暴力到堆优化的完整思路与踩坑
java·算法·leetcode
阿蒙Amon4 小时前
C#每日面试题-委托和事件的区别
java·开发语言·c#
宋情写4 小时前
java-IDEA
java·ide·intellij-idea