Java 如何使用maven管理开发、生产和测试配置?
我是Maven的新手,来自Rails背景。在较高的级别上,如果我正在运行测试、在本地运行应用程序以及部署到生产环境中,我希望连接到不同的数据库 我是这么想的。当我运行Java 如何使用maven管理开发、生产和测试配置?,java,maven,Java,Maven,我是Maven的新手,来自Rails背景。在较高的级别上,如果我正在运行测试、在本地运行应用程序以及部署到生产环境中,我希望连接到不同的数据库 我是这么想的。当我运行mvn test时,它应该使用test.properties;当我在本地运行mvn jetty:run时,它应该使用dev.properties;当我部署它时,它应该获取已经在服务器上而不是在战争中的属性文件 但我不知道在用Maven构建的Java项目中通常是如何做到这一点的。您可以使用Maven做到这一点。您可以为不同的环境、数据
mvn test
时,它应该使用test.properties;当我在本地运行mvn jetty:run
时,它应该使用dev.properties;当我部署它时,它应该获取已经在服务器上而不是在战争中的属性文件
但我不知道在用Maven构建的Java项目中通常是如何做到这一点的。您可以使用Maven做到这一点。您可以为不同的环境、数据集等设置不同的配置文件,并根据您要构建的环境激活它们。我们使用配置文件来区分不同的构建阶段,并且我们使用装配插件为每个配置文件提供不同的装配描述符。我们有一些类似下面的代码。我们的默认配置文件是开发,但是当我们发布“发布”配置文件时,它会自动激活。汇编描述符非常简单,我们有一个“通用”目录结构,一个用于开发,一个用于发布
<build>
<plugins>
<!-- Enable Java 6 features. -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>6</source>
<target>6</target>
</configuration>
</plugin>
<!-- Configure for development environment. -->
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<id>package</id>
<phase>package</phase>
<goals>
<goal>assembly</goal>
</goals>
</execution>
</executions>
<configuration>
<descriptors>
<descriptor>src/main/assembly/dist-dev.xml</descriptor>
</descriptors>
</configuration>
</plugin>
<!-- Deployment configuration. -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<configuration>
<groupId>${project.groupId}</groupId>
<artifactId>${project.artifactId}</artifactId>
<version>${project.version}</version>
<packaging>zip</packaging>
<file>target/${project.build.finalName}.zip</file>
<url>${project.distributionManagement.snapshotRepository.url}</url>
</configuration>
</plugin>
<!-- Release configuration. -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<configuration>
<goals>assembly:assembly deploy:deploy-file</goals>
<useReleaseProfile>false</useReleaseProfile>
<arguments>-Prelease</arguments>
</configuration>
<dependencies>
<dependency>
<groupId>org.apache.maven.scm</groupId>
<artifactId>maven-scm-api</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>org.apache.maven.scm</groupId>
<artifactId>maven-scm-provider-bazaar</artifactId>
<version>1.4</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
<profiles>
<!-- Release profile. -->
<profile>
<id>release</id>
<build>
<plugins>
<!-- Artifact to deploy is assembled zip file. -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<configuration>
<groupId>${project.groupId}</groupId>
<artifactId>${project.artifactId}</artifactId>
<version>${project.version}</version>
<packaging>zip</packaging>
<file>target/${project.build.finalName}-bin.zip</file>
<url>${project.distributionManagement.repository.url}</url>
<updateReleaseInfo>true</updateReleaseInfo>
</configuration>
</plugin>
<!-- Configure for release environment. -->
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptors>
<descriptor>src/main/assembly/dist-rel.xml</descriptor>
</descriptors>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>
org.apache.maven.plugins
maven编译器插件
6.
6.
maven汇编插件
包裹
包裹
装配
src/main/assembly/dist-dev.xml
org.apache.maven.plugins
maven部署插件
${project.groupId}
${project.artifactId}
${project.version}
拉链
target/${project.build.finalName}.zip
${project.distributionManagement.snapshotRepository.url}
org.apache.maven.plugins
maven发布插件
程序集:程序集部署:部署文件
假的
-预备课程
org.apache.maven.scm
maven scm api
1.4
org.apache.maven.scm
maven scm供应商集市
1.4
释放
org.apache.maven.plugins
maven部署插件
${project.groupId}
${project.artifactId}
${project.version}
拉链
target/${project.build.finalName}-bin.zip
${project.distributionManagement.repository.url}
真的
maven汇编插件
src/main/assembly/dist-rel.xml
对于您的测试,您可以将仅测试的Spring配置文件或属性文件放入模块的测试资源中,并让该模块生成一个测试jar。然后,将该测试jar作为测试范围依赖项引用到测试期间需要它的任何模块
对于在开发模式和生产模式下运行,一个可能的与Maven无关的解决方案是使用一个环境变量来指定要使用的不同Spring配置/属性文件/xml文件。这真的是在test.properties、dev.properties等之间进行选择的最简单(或规范)的方法吗?至少我们是这样做的。它一直在为我们工作,这并不难维持,只是很难在第一次发现它。