Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Maven2 cannot find parent from relative path

Tags:

maven-2

maven

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
like image 351
vagabond Avatar asked Mar 05 '10 20:03

vagabond


2 Answers

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

like image 180
Brett Porter Avatar answered Oct 04 '22 16:10

Brett Porter


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.

like image 29
Pascal Thivent Avatar answered Oct 04 '22 16:10

Pascal Thivent