Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Invoke Maven-Module Build from IntelliJ

I was wondering if someone knows a way to invoke a specific Maven module build from IntelliJ that will also build (or use already compiled classes from) modules on which it depends.

So for instance if I would like to only build the module "Model" in the picture, it seems reasonable for me to click the package step on it. But what it actually does it invokes the mvn package step inside this specific module rather than mvn -am -pl module-name from the root module, which also builds all the dependencies.

So is there something that I just don't know?

removed dead ImageShack link

like image 522
Roman Avatar asked Apr 27 '10 17:04

Roman


2 Answers

I do it this way (Idea 8.1.4)

  • Open run dialog (shift-f10 on windows)
  • Click + and pick Maven to add a Maven build config
  • Fill in the form, adding
  • 1 working directory
  • 2 maven command line options
  • 3 maven goals
  • 4 profiles

This is no different than running from command line. Which is what I am assuming you want.

like image 74
sal Avatar answered Sep 18 '22 15:09

sal


You know the mvn command line well! To put this command line into IDEA, right click on your root project, one of the options will be "Create ... [package]".

Make these edits:

  1. set the name to something like "Make Model [install]"
  2. In the goals box, enter your command line, i.e. "-am -pl model install"

I know these aren't strictly goals, but it seems they are passed directly to maven. (Tested in IDEA 9.0.1)

When you run this command, it will now make Model - and the modules it depends on. Equally useful is the "-amd" to make all dependent moduels to verify that changes to Model haven't broken other modules. Having to create Run commands is not quite as elegant as the built-in UI, but you can associate these commands with hotkeys for quick access.

Hope this helps! mdma

PS: A small aside. Package is currently your default build goal - this may not work as intended with multi-module builds, since the latest built classes are not accessible to dependent modules - using install as the default goal is recommended to ensure the most recently built versions of artefacts are used by dependents. If you're concerned that installing might add a broken artefact to the local repo and break all your local builds, use a separate local repo for each project (use a custom settings.xml.)

like image 20
mdma Avatar answered Sep 19 '22 15:09

mdma