13

I'm trying to use Maven2 but my child projects cannot find the parent project.

Directory structure is as follows:

--parent
  --pom.xml
--child
  --pom.xml

Child pom.xml file looks like:

<parent>
    <groupId>com.mycompany.app</groupId>
    <artifactId>myapp</artifactId>
    <version>${app.version}</version>
    <relativePath>.../parent/pom.xml</relativePath>
</parent>

However when I use maven it doesn't even seem to look in the relative path, it seems to try and download it from the maven repository. It's obviously not in the repo. I want it to look at the relative path. What am I doing wrong? Here's the error message:

[INFO] Scanning for projects...
Downloading: http://repo1.maven.org/maven2/com/mycompany/app/myapp/${app.version}/myapp-
${app.version}.pom
[INFO] Unable to find resource 'com.mycompany.app:myapp:pom:${app.version}' in reposit
ory central (http://repo1.maven.org/maven2)
[INFO] ------------------------------------------------------------------------
[ERROR] FATAL ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Error building POM (may not be this project's POM).


Project ID: null:web:jar:null

Reason: Cannot find parent: com.mycompany.app:myapp for project: null:web:jar:null for
 project null:web:jar:null
Péter Török
  • 114,404
  • 31
  • 268
  • 329
vagabond
  • 1,717
  • 4
  • 19
  • 21

6 Answers6

16

You can't use a property for the parent version - it must match. At the moment this is required for the build to be reproducible at a later date. A number of people are tracking this on issue https://issues.apache.org/jira/browse/MNG-624

Eduard Wirch
  • 9,785
  • 9
  • 61
  • 73
Brett Porter
  • 5,827
  • 27
  • 25
12

To my knowledge, variable expansion doesn't work in the parent element (see MNG-624 and comments for background around this), you need to set the version explicitly:

<parent>
  <groupId>com.mycompany.app</groupId>
  <artifactId>myapp</artifactId>
  <version>1-SNAPSHOT</version><!-- or whatever version you use -->
  <relativePath>../parent/pom.xml</relativePath>
</parent>

By the way, if you want to use the same version for all your modules, you should simply inherit it in your child project i.e. not override it (there is no real need for an ${app.version} IMO), not the other way around.

Pascal Thivent
  • 562,542
  • 136
  • 1,062
  • 1,124
7

What I found was that you needed to install the parent pom first, then the subsequent child poms can read them from the repository.

use: mvn -N install

This will install the parent pom without running the other child poms.

supreme Pooba
  • 868
  • 1
  • 7
  • 14
1

The problem is likely that you used .../ instead of ../.

JoshDM
  • 4,939
  • 7
  • 43
  • 72
tzrtzer
  • 11
  • 1
1

It should be:

<parent>
    <groupId>com.mycompany.app</groupId>
    <artifactId>myapp</artifactId>
    <version>${app.version}</version>
    <relativePath>../parent/pom.xml</relativePath>
</parent>
rodrigoap
  • 7,405
  • 35
  • 46
  • That's no the issue (was just a typo IMO), this doesn't work. – Pascal Thivent Mar 05 '10 at 20:55
  • This still helped, maven documentation online ( http://maven.apache.org/guides/introduction/introduction-to-the-pom.html#Example_2 ) actually uses ... which I think is a typo on their website – vagabond Mar 12 '10 at 01:19
1

You may have the packaging type and/or version id not matching. I got the same error as you but played around with the packaging type and got it to work. Try the following.

The following is fragment of the parent pom.xml. The packaging type is "pom". I don't have any code for the parent app, only a common pom.xml for sharing:

   ... 
    <groupId>com.mycompany.app</groupId>
    <artifactId>parent</artifactId>
    <version>${app.version}</version>
    <packaging>pom</packaging>

Child's pom.xml. It is a webapp so packaging type is "war":

<parent>
  <groupId>com.mycompany.app</groupId>
  <artifactId>parent</artifactId>
  <version>${app.version}</version>
  <relativePath>../parent/pom.xml</relativePath>
  <packaging>war</packaging>
</parent>