Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Add modules to a maven multi-module project with different relative paths

In the project I am currently working we have different maven projects in different SVN directories, something like this:

(simplified)
...service/rest-api/trunk/project1
...service/common/trunk/project2
...service/common/trunk/parent-aggregator

The last one (parent-aggregator) is a maven pom project that contains the shared dependencies and the multi-module configuration.

So as I am using Eclipse svn (subclipse) client, it allows me to import all those projects into my eclipse workspace, having all the projects in the same directory, therefore the configuration I created can use the relative paths:

parent-aggregator pom.xml:

<modules>
    <module>../project1</module>
    <module>../project2</module>
</modules>

The issue came when one of my colleagues got the projects using tortoise svn client and then imported the projects to eclipse, tortoise is replicating the svn directory structure in his local file system.

So whenever he tries to do a mvn clean install to the parent-aggregator, it fails due to project1 not being reachable. Which makes sense as in his machine the projects are not in the same directory.

Is there a way to reference modules so both structures can work?

I tried so far to use the artifactId:

<module>artifactId</module>

it doesn't work.

Also tried adding project name, by first defining a:

<name>project1</name>

inside project1 pom.xml

And then referencing it in module:

<module>project1</module>

But it keeps telling me that it cannot find the child module.

The temporary solution that we are using is having different relative path in his local machine:

<modules>
    <module>../../../rest-api/trunk/project1</module>
    <module>../project2</module>
</modules>

Which I don't like at all as we should have a single approach that we can keep in SVN.

like image 264
raspacorp Avatar asked Dec 06 '25 16:12

raspacorp


1 Answers

The first thing you should do is to change your structure as well as in SVN..cause if you have multi-module build you express that those modules belong togehter so you should represent in your structure.

+--- root (pom.xml)
       +--- mod-rest-api (pom.xml)
       +--- mod-war (pom.xml)
       +--- mod-p1 (pom.xml)

If you change your project according to the above you only have entries like this:

<modules>
  <module>mod-rest-api</module>
  <module>mod-war</module>
  <module>mod-p1</module>
</modules>

This will simplify your entries and you don't need to have relativePath entries for your parents. Furthermore you can have the structure in SVN as well:

URL/project/trunk
     +--- root (pom.xml)
         +--- mod-rest-api (pom.xml)
         +--- mod-war (pom.xml)
         +--- mod-p1 (pom.xml)

So you have URL/project/tags and URL/project/branches

Having entries in your modules like .. is from my point of view a build smell which indicates something is wrong with your folder structure in relationship to the project architecture.

like image 176
khmarbaise Avatar answered Dec 08 '25 08:12

khmarbaise



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!