Maven profile for single module

本小妞迷上赌 提交于 2019-12-09 11:31:01

问题


I have a multi module maven project, which builds successfully, I'd like to build just one of the modules I have. How would I do that with profiles ? I could do it from console in two ways, one way is go to the child module and mvn package or I could use reactor to build just one module.

Can I do the same thing with profiles? By modifying POM? Thank you

EDIT

If is impossible from POM, can I do it from settings.xml ?


回答1:


To implement this with profiles, you could use two profiles, one <activeByDefault> with all modules and another one with the wanted module only. Something like this:

<profiles>
  <profile>
    <id>all</id>
    <activation>
      <activeByDefault>true</activeByDefault>
    </activation>
    <modules>
      <module>module-1</module>
      ...
      <module>module-n</module>
    </modules>
  </profile>
  <profile>
    <id>module-2</id>
    <modules>
      <module>module-2</module>
    </modules>
  </profile>
<profiles>

And then call it like this:

mvn -Pmodule-2 package

Two things to note here:

  1. You need to move the <modules> from the POM in a "default" profile (because <modules> from a profile are only additive, they do not hide the modules declared in the POM).
  2. By marking it as <activeByDefault>, the "default" profile will be picked if nothing else is active but deactivated if something else is.

One could even parametrize the name of the module and pass it as property:

<profiles>
  ...
  <profile>
    <id>module-x</id>
    <activation>
      <property>
        <name>module-name</name>
      </property>
    </activation>
    <modules>
      <module>${module-name}</module>
    </modules>
  </profile>
<profiles>

And invoke maven like this:

mvn -Dmodule-name=module-2 package

But this is a poor implementation IMHO, I prefer the -pl "advanced" reactor options (less xml, much more power and flexibility):

mvn -pl module-2 package



回答2:


To overcome additivity nature of maven default <modules> working with <profiles>, you can use reactor with particular profile, e.g.:

mvn -pl module-2 -Pprofile-name package

This will package module-2 defined in profile-name and not in default profile.



来源:https://stackoverflow.com/questions/2400984/maven-profile-for-single-module

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