Uploaded image for project: 'Jenkins'
  1. Jenkins
  2. JENKINS-5273

Hudson doesn't replace variable in settings.xml

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Unresolved
    • Icon: Critical Critical
    • maven-plugin
    • 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

            Unassigned Unassigned
            henryju Julien HENRY
            Votes:
            3 Vote for this issue
            Watchers:
            3 Start watching this issue

              Created:
              Updated: