-
Bug
-
Resolution: Unresolved
-
Critical
-
None
-
Hudson 1.336
I have followed some best practice about using private repository for each M2 project.
My first try was to put:
<localRepository>${user.home}/repositories/${env.JOB_NAME}/repository</localRepository>
in /var/lib/hudson/.m2/settings.xml
but the build failed:
Parsing POMs ERROR: Echec ? la lecture des POMs hudson.util.IOException2: remote file operation failed at hudson.FilePath.act(FilePath.java:677) at hudson.FilePath.act(FilePath.java:665) at hudson.maven.MavenModuleSetBuild$RunnerImpl.parsePoms(MavenModuleSetBuild.java:531) at hudson.maven.MavenModuleSetBuild$RunnerImpl.doRun(MavenModuleSetBuild.java:391) at hudson.model.AbstractBuild$AbstractRunner.run(AbstractBuild.java:417) at hudson.model.Run.run(Run.java:1176) at hudson.maven.MavenModuleSetBuild.run(MavenModuleSetBuild.java:304) at hudson.model.ResourceController.execute(ResourceController.java:88) at hudson.model.Executor.run(Executor.java:123) Caused by: hudson.remoting.ProxyException: hudson.maven.MavenModuleSetBuild$MavenExecutionException: org.apache.maven.project.ProjectBuildingException: Cannot find parent: com.mycompany:mycompany-super-pom for project: com.monclient.monprojet:monprojet:jar:1.0-SNAPSHOT for project com.monclient.monprojet:monprojet:jar:1.0-SNAPSHOT at hudson.maven.MavenModuleSetBuild$PomParser.invoke(MavenModuleSetBuild.java:881) at hudson.maven.MavenModuleSetBuild$PomParser.invoke(MavenModuleSetBuild.java:786) at hudson.FilePath$FileCallableWrapper.call(FilePath.java:2072) at hudson.remoting.UserRequest.perform(UserRequest.java:104) at hudson.remoting.UserRequest.perform(UserRequest.java:48) at hudson.remoting.Request$2.run(Request.java:270) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) at java.util.concurrent.FutureTask.run(FutureTask.java:138) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:619) Caused by: hudson.remoting.ProxyException: org.apache.maven.project.ProjectBuildingException: Cannot find parent: com.mycompany:mycompany-super-pom for project: com.monclient.monprojet:monprojet:jar:1.0-SNAPSHOT for project com.monclient.monprojet:monprojet:jar:1.0-SNAPSHOT at org.apache.maven.project.DefaultMavenProjectBuilder.assembleLineage(DefaultMavenProjectBuilder.java:1370) at org.apache.maven.project.DefaultMavenProjectBuilder.buildInternal(DefaultMavenProjectBuilder.java:821) at org.apache.maven.project.DefaultMavenProjectBuilder.buildFromSourceFileInternal(DefaultMavenProjectBuilder.java:506) at org.apache.maven.project.DefaultMavenProjectBuilder.build(DefaultMavenProjectBuilder.java:215) at hudson.maven.MavenEmbedder.readProject(MavenEmbedder.java:334) at hudson.maven.MavenModuleSetBuild$PomParser.invoke(MavenModuleSetBuild.java:861) ... 11 more Caused by: hudson.remoting.ProxyException: org.apache.maven.project.ProjectBuildingException: POM 'com.mycompany:mycompany-super-pom' not found in repository: Unable to download the artifact from any repository
After a bit of googling I found this that it may be caused by Maven not replacing ${user.home} [1].
So I tried with a hard coded user.home:
<localRepository>/var/lib/hudson/repositories/${env.JOB_NAME}/repository</localRepository>
Now the build is working, but looking at the content of /var/lib/hudson/repositories I have 2 folders:
- The first folder is named "${env.JOB_NAME}" (not evaluated) and contains the parent pom only
- The second folder is named "My Job" (the actual job name) and contains all dependencies
So it seems Hudson pom parser doesn't deal with variable in settings.xml (at least in localRepository section).
[1] http://www.mail-archive.com/users@maven.apache.org/msg102070.html
Note that there is an issue in Maven 2.2.1 not replacing ${user.home} variable in localRepository. This is fixed in Maven 3 alpha 6.
But there is still an issue in hudson as it is not even replacing ${env.JOB_NAME}.