Activate different Maven profiles depending on current module?

谁都会走 提交于 2019-12-18 07:09:28

问题


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?


回答1:


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.




回答2:


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.



回答3:


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.




回答4:


With regard to file-based activation, you can try removing ${basedir}. We use it like this:

<activation>
   <file>
      <missing>target/jboss/conf/jboss-service.xml</missing>
   </file>
</activation>



回答5:


I dont know if this helps, but I solved a similar problem with the following approach:

  1. I created and described the profile in the parent POM, which has activeByDefault=false. The PluginManagement-Section then contains the configurations for different plugins.
  2. The children can reuse this profile, and set activeByDefault=true This makes the profile active, but still none of the plugins are activated.
  3. But fortunately the described plugin configurations are available. You can reuse them in children by defining them in the Plugins-Section. You just provide the group- and the artifactID, and set inherited=true for each plugin you want to reuse in the children.

I hope that helps. Sorry for not including any code snippets, but I hope even so the soutions is understandable.




回答6:


You can set a property in each module that you want to use the profile, and then use "property" activation in your profiles.



来源:https://stackoverflow.com/questions/1018720/activate-different-maven-profiles-depending-on-current-module

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!