SQC
SQC

Reputation: 611

How to compile dependency in maven?

Scenario:

I have a main level project A and within A , two child projects B and C worked on by different developers , but they agree on the abstraction through common interfaces.

B depends on C (dependency). In B's pom I added

<dependency> .. details of project C..</dependency> .

Doing this, maven inserts the dependencies fine except that project C is not recompiled.

I want project C to automatically re-compile every time I compile B.

Upvotes: 20

Views: 41234

Answers (3)

mmounirou
mmounirou

Reputation: 759

If you want to build B and automatically build it's dependencies you can use the advanced options of the maven reactor like --also-make-dependents .

mvn clean install --projects B --also-make 

Or short

mvn clean install -pl B -am

That will compile all submodules of A whose B depends on . There are a useful post on sonatype blog on the advanced options of maven reactor. http://www.sonatype.com/people/2009/10/maven-tips-and-tricks-advanced-reactor-options/

Upvotes: 27

Abhinav Sarkar
Abhinav Sarkar

Reputation: 23802

List projects B and C as modules in the pom of the project A. Now when you build project A, it should build project B and C automatically and in the correct order.

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
                             http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>multi</groupId>
    <artifactId>A</artifactId>
    <packaging>pom</packaging>
    <version>1.0</version>

    <modules>
        <module>B</module>
        <module>C</module>
    </modules>
</project>

Upvotes: 10

bnguyen82
bnguyen82

Reputation: 6248

I often use Maven reactor plugin to deal with these type of problems. This plugin even covers tough requirements that a complex project with many sub modules in a complex structure may has. See link for examples.

For above situations, using

mvn reactor:make -Dmake.folders=B 

to build B and C (and all dependencies of B if any).

Hope this helpful.

Upvotes: 1

Related Questions