没有通过-P指定配置文件时执行什么Maven配置文件?

时间:2015-12-10 17:35:06

标签: java maven

我不熟悉Maven,并试图弄清楚它如何在我们现有的项目上运作。

项目和文件夹结构基本上是

  

A

     

A \ 1

     

A \ 2

     

A \ 3

每个文件夹里面都有一个pom文件。每个pom包含一个或多个定义的配置文件。 我不明白的是这个命令

  

A> mvn install

如何执行所有pom以及正在执行哪些配置文件?

我没有看到任何标有 activebydefault

的标签

当我需要花时间在第1步学习并建立一些项目时感到沮丧,但我被迫在第50步没有任何人知道关于Maven的第一件事。当然,解决方案总是在昨天到期。

2 个答案:

答案 0 :(得分:3)

Profiles可以在您的POM中,在父POM中,在您的设置中指定。因此,仅查看您的POM文件可能还不够。

运行mvn help:active-profiles会为您提供所有活动配置文件的列表以及来自哪个来源(pom或设置)。
运行mvn help:all-profiles将为您提供所有可用配置文件,活动配置文件以及源(pom或设置)的列表。

运行mvn help:effective-pom -Doutput=full-pom.xml将为您提供完整的POM文件(在full-pom.xml生成的文件中),作为当前pom,父pom和设置的合并。这将是真实的完整来源。

您描述的结构适用于多模块maven项目,这意味着Aaggregator项目(包装pom,其唯一的交付是pom文件,仅限于函数是提供它将构建的modules 但是,请注意,在Maven聚合和inheritance是两个不同的概念,它们经常一起使用:聚合意味着我将构建我构建的所有已定义模块的一部分;继承意味着我将从父pom继承配置。因此,A\1可以继承项目A中的个人资料,如果在A\1的pom中,您会发现A定义为parent(通常情况属实,有一个聚合器,它也是所有已定义模块的父级)。

为什么要有聚合器?拥有相关子项目的集中构建和位置,同时仍然保持子模块间关注点的良好分离。此外,作为Maven的最佳实践,项目应该只生成一个人工制品,因此可能是一个Web应用程序在一个模块中具有逻辑,在另一个模块中生成战争,在另一个模块中生成耳朵的情况。

为什么要继承?要有一个集中的位置来设置共享/公共配置,例如配置文件,还有依赖项和dependencies management

最后,这是一个常见的误解,因此也意识到:

  • 如果配置文件默认在Maven中处于活动状态,它将成为默认构建的一部分。但是,如果您通过命令行激活配置文件(通过-P选项),您将激活所请求的配置文件,但也会自动停用默认激活的配置文件
  • 上述机制不适用于您的maven安装的settings.xml中定义的配置文件(默认情况下,如果已激活,则应用于相关计算机上的所有Maven版本)。

更新有关此答案的进一步说明受到一些评论的影响:Maven构建被指定为build部分(插件执行流程)的一部分,而不是必然需要配置文件。配置文件通常被定义为为构建添加进一步的行为,但是不管是否有任何可激活的配置文件,最好成功构建构建,也就是说,我不必知道定义的配置文件以运行构建,它是maven,协调和约定优于配置的核心概念:给定一个Maven项目,我总是可以假设只需mvn clean install即可完成所需的魔法。
有关从Maven开始的常见问题列表,官方Getting Started Guide已经提供了很好的帮助 另请查看官方简介简介的Profiles Pitfalls以获取有关配置文件的更多指导。

答案 1 :(得分:2)

除非您将个人资料标记为activeByDefault,否则不会激活个人资料。