[ 
https://jira.codehaus.org/browse/MNG-5219?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=341497#comment-341497
 ] 

Jason van Zyl commented on MNG-5219:
------------------------------------

A better way to handle this generally might be to disallow a non-existent 
artifact to be attached in the first place and throw an exception in 
MavenProject#addAttachedArtifact. This will force users to attach artifacts 
only after they have been created, but I don't think that's a bad thing.

> Regression from M2: Installing non-existing artifact is silently ignored
> ------------------------------------------------------------------------
>
>                 Key: MNG-5219
>                 URL: https://jira.codehaus.org/browse/MNG-5219
>             Project: Maven 2 & 3
>          Issue Type: Bug
>          Components: Artifacts and Repositories
>    Affects Versions: 3.0.3, 3.0.4
>         Environment: Apache Maven 3.0.3 (r1075438; 2011-02-28 18:31:09+0100)
> Maven home: /home/kozelka/opt/apache-maven-3.0.3
> Java version: 1.6.0_22, vendor: Sun Microsystems Inc.
> Default locale: en_US, platform encoding: ANSI_X3.4-1968
> OS name: "linux", version: "2.6.38-13-generic", arch: "amd64", family: "unix"
>            Reporter: Petr Kozelka
>            Assignee: Jason van Zyl
>             Fix For: 3.2.2
>
>         Attachments: MNG-fail-install-ifnotfound.patch, pom.xml
>
>
> Maven 2.2.1 used to fail during "install" phase when an attached artifact did 
> not exist.
> This is no longer true with version 3.0.3.
> To reproduce the bug, store attached pom.xml into an empty directory and try:
> a) maven 2.2.1 - use command "mvn clean install -e" to see the stacktrace:
> {noformat}
> [INFO] [install:install {execution: default-install}]
> [INFO] Installing /TESTDIR/pom.xml to 
> /LOCALREPO/test/mvn/install/test-mvn-install/1-SNAPSHOT/test-mvn-install-1-SNAPSHOT.pom
> [INFO] Installing /TESTDIR/target/nonexistent.nonsense to 
> /LOCALREPO/test/mvn/install/test-mvn-install/1-SNAPSHOT/test-mvn-install-1-SNAPSHOT.nonsense
> [INFO] 
> ------------------------------------------------------------------------
> [ERROR] BUILD ERROR
> [INFO] 
> ------------------------------------------------------------------------
> [INFO] Error installing artifact: File /TESTDIR/target/nonexistent.nonsense 
> does not exist
> [INFO] 
> ------------------------------------------------------------------------
> [INFO] Trace
>     org.apache.maven.lifecycle.LifecycleExecutionException: Error installing 
> artifact: File /TESTDIR/target/nonexistent.nonsense does not exist
>     at 
> org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:719)
>     at 
> org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalWithLifecycle(DefaultLifecycleExecutor.java:556)
>     at 
> org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:535)
>     at 
> org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures(DefaultLifecycleExecutor.java:387)
>     at 
> org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultLifecycleExecutor.java:348)
>     at 
> org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:180)
>     at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:328)
>     at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:138)
>     at org.apache.maven.cli.MavenCli.main(MavenCli.java:362)
>     at org.apache.maven.cli.compat.CompatibleMain.main(CompatibleMain.java:60)
>     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>     at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>     at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>     at java.lang.reflect.Method.invoke(Method.java:597)
>     at org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315)
>     at org.codehaus.classworlds.Launcher.launch(Launcher.java:255)
>     at org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430)
>     at org.codehaus.classworlds.Launcher.main(Launcher.java:375)
> Caused by: org.apache.maven.plugin.MojoExecutionException: Error installing 
> artifact: File /TESTDIR/target/nonexistent.nonsense does not exist
>     at 
> org.apache.maven.plugin.install.InstallMojo.execute(InstallMojo.java:143)
>     at 
> org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:490)
>     at 
> org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:694)
>     ... 17 more
> Caused by: org.apache.maven.artifact.installer.ArtifactInstallationException: 
> Error installing artifact: File /TESTDIR/target/nonexistent.nonsense does not 
> exist
>     at 
> org.apache.maven.artifact.installer.DefaultArtifactInstaller.install(DefaultArtifactInstaller.java:119)
>     at 
> org.apache.maven.plugin.install.InstallMojo.execute(InstallMojo.java:133)
>     ... 19 more
> Caused by: java.io.IOException: File /TESTDIR/target/nonexistent.nonsense 
> does not exist
>     at hidden.org.codehaus.plexus.util.FileUtils.copyFile(FileUtils.java:1003)
>     at 
> org.apache.maven.artifact.installer.DefaultArtifactInstaller.install(DefaultArtifactInstaller.java:98)
>     ... 20 more
> [INFO] 
> ------------------------------------------------------------------------
> {noformat}
> Here, M2 fails, and gives nice explanatory message.
> b) maven 3.0.3 - use command "mvn clean install -X" to see the improper 
> message from aether:
> {noformat}
> [DEBUG] Configuring mojo 
> 'org.apache.maven.plugins:maven-install-plugin:2.3.1:install' with basic 
> configurator -->
> [DEBUG]   (f) artifact = test.mvn.install:test-mvn-install:pom:1-SNAPSHOT
> [DEBUG]   (f) attachedArtifacts = 
> [test.mvn.install:test-mvn-install:nonsense:1-SNAPSHOT]
> [DEBUG]   (f) createChecksum = false
> [DEBUG]   (f) localRepository =        id: local
>       url: file:///LOCALREPO/
>    layout: none
> [DEBUG]   (f) packaging = pom
> [DEBUG]   (f) pomFile = /TESTDIR/pom.xml
> [DEBUG]   (f) updateReleaseInfo = false
> [DEBUG] -- end configuration --
> [INFO] Installing /TESTDIR/pom.xml to 
> /LOCALREPO/test/mvn/install/test-mvn-install/1-SNAPSHOT/test-mvn-install-1-SNAPSHOT.pom
> [DEBUG] Installing 
> test.mvn.install:test-mvn-install:1-SNAPSHOT/maven-metadata.xml to 
> /LOCALREPO/test/mvn/install/test-mvn-install/1-SNAPSHOT/maven-metadata-local.xml
> [DEBUG] Installing test.mvn.install:test-mvn-install/maven-metadata.xml to 
> /LOCALREPO/test/mvn/install/test-mvn-install/maven-metadata-local.xml
> [INFO] Installing /TESTDIR/target/nonexistent.nonsense to 
> /LOCALREPO/test/mvn/install/test-mvn-install/1-SNAPSHOT/test-mvn-install-1-SNAPSHOT.nonsense
> [DEBUG] Skipped re-installing /TESTDIR/target/nonexistent.nonsense to 
> /LOCALREPO/test/mvn/install/test-mvn-install/1-SNAPSHOT/test-mvn-install-1-SNAPSHOT.nonsense,
>  seems unchanged
> [DEBUG] Installing 
> test.mvn.install:test-mvn-install:1-SNAPSHOT/maven-metadata.xml to 
> /LOCALREPO/test/mvn/install/test-mvn-install/1-SNAPSHOT/maven-metadata-local.xml
> [DEBUG] Installing test.mvn.install:test-mvn-install/maven-metadata.xml to 
> /LOCALREPO/test/mvn/install/test-mvn-install/maven-metadata-local.xml
> [INFO] 
> ------------------------------------------------------------------------
> [INFO] BUILD SUCCESS
> [INFO] 
> ------------------------------------------------------------------------
> {noformat}
> In this case, the problem is (almost silently) ignored, because M3 (aether) 
> sees that the new file is the same as the old one _(correct :) - none of them 
> exist)_, due to a [bug 
> here|https://github.com/sonatype/sonatype-aether/blob/master/aether-impl/src/main/java/org/sonatype/aether/impl/internal/DefaultInstaller.java#L260].
> He simply believes that same timestamp on both sides means that the artifact 
> does not need to be copied.
> This is true *except when the timestamp is -1* - indicating missing file.
> There are several ways to fix this:
> - in maven-3 code (attached patch does this)
> - in aether code
> - in both - which I believe is best



--
This message was sent by Atlassian JIRA
(v6.1.6#6162)

Reply via email to