Skip to content

Failed creating the phar ( ... cannot be overloaded with ...) #15

@lcotonea

Description

@lcotonea

Hi!

On linux and cygwin platforms, I've this issue during a "mvn clean install".
On linux (centos 6), I've installed PHP 5.3.3. On cygwin (windows 7), I've installed PHP 5.3.13.

Here the stack trace:

org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.phpmaven:maven-php-plugin:2.0.2:phar (default-phar) on project proj: failed creating the phar.
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:217)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:320)
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156)
    at org.jvnet.hudson.maven3.launcher.Maven3Launcher.main(Maven3Launcher.java:79)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchStandard(Launcher.java:329)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:239)
    at org.jvnet.hudson.maven3.agent.Maven3Main.launch(Maven3Main.java:158)
    at hudson.maven.Maven3Builder.call(Maven3Builder.java:98)
    at hudson.maven.Maven3Builder.call(Maven3Builder.java:64)
    at hudson.remoting.UserRequest.perform(UserRequest.java:118)
    at hudson.remoting.UserRequest.perform(UserRequest.java:48)
    at hudson.remoting.Request$2.run(Request.java:326)
    at hudson.remoting.InterceptingExecutorService$1.call(InterceptingExecutorService.java:72)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
    at java.util.concurrent.FutureTask.run(FutureTask.java:166)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
    at java.lang.Thread.run(Thread.java:722)
Caused by: org.apache.maven.plugin.MojoExecutionException: failed creating the phar.
    at org.phpmaven.plugin.build.AbstractPharMojo.execute(AbstractPharMojo.java:268)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209)
    ... 27 more
Caused by: org.phpmaven.exec.PhpErrorException: 
Failed to execute PHP with arguments '"/var/lib/jenkins/jobs/MYJOB/workspace/target/snippet.php"' [Return: 255]:
PHP Fatal error:  Uncaught exception 'UnexpectedValueException' with message 'alias "proj-2.0.1-xxx-SNAPSHOT.phar" is already used for archive "/data/var/lib/jenkins/jobs/MYJOB/workspace/target/proj-2.0.1-xxx-SNAPSHOT.phar" cannot be overloaded with "/var/lib/jenkins/jobs/MYJOB/workspace/target/proj-2.0.1-xxx-SNAPSHOT.phar"' in /data/var/lib/jenkins/jobs/MYJOB/workspace/target/snippet.php:22
Stack trace:
#0 /data/var/lib/jenkins/jobs/MYJOB/workspace/target/snippet.php(22): Phar->__construct('/var/lib/jenkin...', 0, 'proj-2.0.1-...')
#1 {main}
  thrown in /data/var/lib/jenkins/jobs/MYJOB/workspace/target/snippet.php on line 22

in file: /var/lib/jenkins/jobs/MYJOB/workspace/target/snippet.php
    at org.phpmaven.exec.PhpExecutable.execute(PhpExecutable.java:294)
    at org.phpmaven.exec.PhpExecutable.execute(PhpExecutable.java:308)
    at org.phpmaven.exec.PhpExecutable.executeCode(PhpExecutable.java:423)
    at org.phpmaven.exec.PhpExecutable.executeCode(PhpExecutable.java:390)
    at org.phpmaven.exec.PhpExecutableConfiguration$CachedExecutable.executeCode(PhpExecutableConfiguration.java:358)
    at org.phpmaven.phar.PharPackager.packagePhar(PharPackager.java:157)
    at org.phpmaven.plugin.build.AbstractPharMojo.execute(AbstractPharMojo.java:258)
    ... 29 more

This is the line 22 of the snippet.php that causes the build failure.

So, here the snippet.php file automatically generated by the php-maven plugin:

<?php 
class RecursiveDirectoryIterator2 extends RecursiveDirectoryIterator {
  function getChildren() {
    try {
      return parent::getChildren();
    } catch(UnexpectedValueException $e) {
      return new RecursiveArrayIterator(array());
    }
  }
}
if (file_exists('/var/lib/jenkins/jobs/MYJOB/workspace/target'.DIRECTORY_SEPARATOR.'proj-2.0.1-xxx-SNAPSHOT.phar')) unlink('/var/lib/jenkins/jobs/MYJOB/workspace/target'.DIRECTORY_SEPARATOR.'proj-2.0.1-xxx-SNAPSHOT.phar');
$phar = new Phar('/var/lib/jenkins/jobs/MYJOB/workspace/target'.DIRECTORY_SEPARATOR.'proj-2.0.1-xxx-SNAPSHOT.phar', 0, 'proj-2.0.1-xxx-SNAPSHOT.phar');
$phar->startBuffering();
$base = realpath('/var/lib/jenkins/jobs/MYJOB/workspace/target/classes');
$ite = new RecursiveDirectoryIterator2($base, FilesystemIterator::SKIP_DOTS);
$len = strlen($base);
foreach (new RecursiveIteratorIterator($ite) as $filename=>$cur) {
  if (substr(realpath($filename), 0, $len) == $base) {
    $phar->addFile($filename, str_replace('\\', '/', ''.substr($filename, $len + 1)));  }
}
$phar->stopBuffering();
$phar = new Phar('/var/lib/jenkins/jobs/MYJOB/workspace/target'.DIRECTORY_SEPARATOR.'proj-2.0.1-xxx-SNAPSHOT.phar', 0, 'proj-2.0.1-xxx-SNAPSHOT.phar');
$phar->startBuffering();
foreach (new RecursiveIteratorIterator($phar) as $file) { if (!$file->isDir()) $file->compress(Phar::GZ); }
$phar->setStub('<?php die(\'Unable to execute this phar\'); __HALT_COMPILER(); ?>');
$phar->stopBuffering();

At line 22, It seems that the "new phar..." causes an access violation on the previous phar file (this is the same file). If I comment this line, everything is fine and I can launch a mvn install.

I think that the code generation of the snippet.php file must not create new phar if a a previous phar object has been instanciated and uses the same target phar file.

So, Is there a way to workaround this problem until the bug fix release?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions