Maven个人资料 - dev vs production

时间:2012-02-28 05:01:24

标签: maven maven-2

我很好奇如何设置开发与生产maven配置文件。我应该只在开发配置文件中放置快照repo,在生产配置文件中放置其他工件(本地存储库,发行版等)吗?

这些类型的不同配置文件有哪些主要内容?

2 个答案:

答案 0 :(得分:2)

显然,主要区别在于Prod,Test和Dev配置文件中的设置。像

这样的事情
  • 数据库连接
  • 资源设置,线程池配置,日志文件位置及其大小等属性
  • 对于本地存储设置,您可能有/mnt/media但是对于Prod,您可能需要S3

在这些配置文件中有所不同。

现在来发布,通常测试配置文件有SNAPSHOT版本(如夜间版本),配置为转到你的SNAPSHOT存储库。并且通常使用Maven Release Plugin发布Prod配置文件,该配置文件会自动从您的发布版本/工件中敲除SNAPSHOT。并配置为在RELEASES repo中存储工件。这些回购的配置类似于

    <profile>
        <id>test</id>
        <distributionManagement>
            <snapshotRepository>
                <id>snapshotrepo</id>
                <name>Repository for snapshots only</name>
                <layout>default</layout>
                <uniqueVersion>false</uniqueVersion>
                <url>http://repo.company.com/snapshots</url>
            </snapshotRepository>
        </distributionManagement>
        .....
        .....
        .....

    <profile>
        <id>prod</id>
        </distributionManagement>
            <repository>
                <id>releaserepo</id>
                <name>Final release artifacts</name>
                <layout>default</layout>
                <uniqueVersion>false</uniqueVersion>
                <url>http://repo.company.com/releases</url>
            </repository>
        </distributionManagement>
        ....
        ....

这些回购的凭证进入settings.xml

开发配置文件通常没有配置为发布到公司仓库(因为它太混乱了无用的工件),它只是安装在您的本地仓库中,如SNAPSHOT并在每个构建上覆盖。

答案 1 :(得分:1)

通常(根据我的经验)不同的repos在settings.xml中配置,而不是在单独的配置文件中配置(默认情况下可能在配置文件中除外)。

默认配置文件的示例:

<profile>
<id>default</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<repositories>
    <repository>
        <id>central</id>
        <url>http://some_url/content/groups/public</url>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </repository>
    <repository>
        <id>snapshots</id>
        <url>http://some_url/content/groups/public-snapshots</url>
        <releases>
            <enabled>false</enabled>
        </releases>
    </repository>
</repositories>

如果您担心版本中存在SNAPSHOT依赖项,可以使用maven-release-plugin之类的工具来验证项目中是否存在SNAPSHOT依赖项。

  

这些类型的不同配置文件有哪些主要内容?

您经常使用配置文件在不同的构建环境之间进行分隔。例如,使用CI时,您经常将插件用于静态代码分析,报告,测试覆盖等,只能在CI服务器上构建时激活(因为启用这些工具需要更多时间来运行它)。 / p>

另一个用途是分离出应用程序的特定部分,例如,您不希望验证测试子模块在每个mvn测试中运行,但有时仅在启用 mvn test -p acceptanceTests <时/ strong>个人资料

环境特定版本的问题

现在,配置文件有时用于分离连接字符串,连接点等配置。在我看来,这并不理想,因为您最终会使用特定于环境的构建。有时这很难避免,但大多数时候这可以通过外部化配置来解决(确保有适当的配置管理),并在dev / test / prod中使用相同的二进制工件。这样你就可以确定通过系统测试的构建与prod等中的构建相同。