一个是生产打包的时候, 一个是本地测试启动的时候,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的配置,确保生产打包和本地测试启动时使用最合适的依赖和插件设置。

相关推荐
purrrew10 分钟前
【Java EE初阶】多线程(二)
java·java-ee
左灯右行的爱情13 分钟前
Redis 缓存并发问题深度解析:击穿、雪崩与穿透防治指南
java·数据库·redis·后端·缓存
百锦再1 小时前
Android Studio开发中Application和Activity生命周期详解
android·java·ide·app·gradle·android studio·studio
大G哥1 小时前
Java 中的 Integer 缓存池:背后的性能优化机制解析
java·开发语言·缓存·性能优化
CN.LG1 小时前
IntelliJ IDEA 内存优化
java·ide·intellij-idea
笨蛋不要掉眼泪1 小时前
SpringMVC再复习1
java·spring·mvc
苹果酱05671 小时前
python3语言基础语法整理
java·vue.js·spring boot·mysql·课程设计
牛马baby1 小时前
Java高频面试之并发编程-11
java·开发语言·面试
radient2 小时前
Java/Go双修 - Go并发Goroutine与Java对比
java·后端·go
GuGuStudy2 小时前
枚举以及lambda,以及函数式接口的小九九
java