Activate different Maven profiles depending on current module?

We have a multi module build with modules using different technologies, like Java and Flex. Is it somehow possible to activate different profiles based on the module that is compiled currently?

I tried it with an activation like

<profile>
  <id>flex</id>
  <activation>
    <file>
      <exists>${basedir}/src/main/flex</exists>
    </file>
  </activation>
  ...
</profile

But it didn't work, although the use of ${basedir} is documented in the Maven documentation (this is a bug in Maven). Is there a different possibility to have different activations based on the current module? Or does Maven only allow to activate a profile for all modules or not at all?


For those like myself reading this question looking for answers, this use case now works in Maven 3.

There is was a bug affecting this feature in early versions of 3 (see http://jira.codehaus.org/browse/MNG-2363) but it works for me correctly using Maven 3.0.4.


After some more research I finally came to the conclusion that this is not possible for two reasons in the current Maven version (2.1.0):

  • Maven profiles are not inherited, so you can't define a profile in a parent POM and activate that in a child POM.
  • I haven't found a possibility to activate a profile from a POM itself. The activation does not work with ${basedir} and the property activation response only to system settings, which are globally specified through the -D option.

  • In 2.2.1, profiles are inherited but the ${basedir} issue is still there. I'm in the same boat - I need to activate a profile based on the existence of a file in a given project. My child builds run individually just fine (inherited profile activated by local file existance), but if I run the build from the top parent, they fail because the file isn't found.

    链接地址: http://www.djcxy.com/p/62118.html

    上一篇: 为什么我无法从另一个配置文件激活Maven2配置文件?

    下一篇: 根据当前模块激活不同的Maven配置文件?