Details
-
Type:
Bug
-
Status:
Closed
-
Priority:
Major
-
Resolution: Duplicate
-
Affects Version/s: 2.0.4
-
Fix Version/s: None
-
Component/s: Artifacts and Repositories
-
Labels:None
-
Environment:jdk 1.5.0_06, maven 2.0.4, jboss-package-maven-plugin 2.0-SNAPSHOT (from mojo-sandbox SVN r2088)
-
Complexity:Intermediate
Description
When using the jboss-packaging plugin and setting <packaging> to jboss-sar in my pom, the artifact is copied into the local repository with the wrong file extension (.jboss-sar instead of .sar). The jboss-packaging components.xml has <extension> set to sar. The file in the build target directory has the correct .sar extension.
Here's the relevant excerpt from my pom.xml:
<packaging>jboss-sar</packaging>
...
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jboss-packaging-maven-plugin</artifactId>
<version>2.0-SNAPSHOT</version>
<extensions>true</extensions>
...
-
Hide
- bug.zip
- 25/Feb/09 3:02 PM
- 32 kB
- Nigel Magnay
-
- bug/.classpath 0.3 kB
- __MACOSX/bug/._.classpath 0.2 kB
- bug/.DS_Store 6 kB
- __MACOSX/bug/._.DS_Store 0.1 kB
- bug/.project 0.5 kB
- __MACOSX/bug/._.project 0.2 kB
- bug/.settings/org.eclipse.jdt.core.prefs 0.2 kB
- __MACOSX/.../._org.eclipse.jdt.core.prefs 0.2 kB
- bug/.../org.maven.ide.eclipse.prefs 0.3 kB
- __MACOSX/.../._org.maven.ide.eclipse.prefs 0.2 kB
- __MACOSX/bug/._.settings 0.2 kB
- bug/master-pom/.classpath 0.3 kB
- __MACOSX/bug/master-pom/._.classpath 0.2 kB
- bug/master-pom/.project 0.5 kB
- __MACOSX/bug/master-pom/._.project 0.2 kB
- bug/.../org.eclipse.jdt.core.prefs 0.2 kB
- __MACOSX/.../._org.eclipse.jdt.core.prefs 0.2 kB
- bug/.../org.maven.ide.eclipse.prefs 0.3 kB
- __MACOSX/.../._org.maven.ide.eclipse.prefs 0.2 kB
- __MACOSX/bug/master-pom/._.settings 0.2 kB
- bug/master-pom/pom.xml 1 kB
- __MACOSX/bug/master-pom/._pom.xml 0.2 kB
- __MACOSX/bug/._master-pom 0.2 kB
- bug/pom.xml 0.7 kB
- __MACOSX/bug/._pom.xml 0.2 kB
- bug/sar-dep/.classpath 0.7 kB
- __MACOSX/bug/sar-dep/._.classpath 0.2 kB
- bug/sar-dep/.DS_Store 6 kB
- __MACOSX/bug/sar-dep/._.DS_Store 0.1 kB
- bug/sar-dep/.project 1 kB
-
- FrigExtensionMojo.java
- 26/Feb/09 3:43 AM
- 3 kB
- Nigel Magnay
Issue Links
- duplicates
-
MNG-3506
Custom ArtifactHandler not resolved for project when an additional plugin with extensions is defined in parent pom
-
-
MNG-1682
Plugins do not honor the correct extension when run as a part of a multiproject build
-
- is duplicated by
-
MJBOSSPACK-5
jboss-sar packaging copies artifact into local repository with .jboss-sar extension
-
- relates to
-
MNG-2240
Handling of custom lifecycle artifacts is not working properly
-
Activity
The artifact + ArtifactHandler are created before the project is scanned for plugins,
and before the custom ArtifactHandler is discovered.
It is never updated again after that, resulting in a default artifact handler of type 'jboss-sar',
and getExtension defaults to the type.
It works fine for core plugins since they're in the core components.xml which gets discovered
before any maven project instance and/or artifact is created.
Actually, after the extensions are processed, the artifactHandler is updated on the project,
except that the newly discovered artifact handler is not present in there.
some debug:
+ Error stacktraces are turned on.
Maven version: 2.1-SNAPSHOT
[INFO] Scanning for projects...
No artifact handler for type jboss-sar - using a default handler
java.lang.Throwable
at org.apache.maven.artifact.handler.manager.DefaultArtifactHandlerManager.getArtifactHandler(DefaultArtifactHandlerManager.java:42)
at org.apache.maven.artifact.factory.DefaultArtifactFactory.createArtifact(DefaultArtifactFactory.java:153)
at org.apache.maven.artifact.factory.DefaultArtifactFactory.createArtifact(DefaultArtifactFactory.java:114)
at org.apache.maven.artifact.factory.DefaultArtifactFactory.createArtifact(DefaultArtifactFactory.java:108)
at org.apache.maven.artifact.factory.DefaultArtifactFactory.createBuildArtifact(DefaultArtifactFactory.java:72)
at org.apache.maven.project.DefaultMavenProjectBuilder.processProjectLogic(DefaultMavenProjectBuilder.java:903)
at org.apache.maven.project.DefaultMavenProjectBuilder.buildInternal(DefaultMavenProjectBuilder.java:754)
at org.apache.maven.project.DefaultMavenProjectBuilder.buildFromSourceFileInternal(DefaultMavenProjectBuilder.java:425)
at org.apache.maven.project.DefaultMavenProjectBuilder.build(DefaultMavenProjectBuilder.java:194)
at org.apache.maven.DefaultMaven.getProject(DefaultMaven.java:580)
at org.apache.maven.DefaultMaven.collectProjects(DefaultMaven.java:512)
at org.apache.maven.DefaultMaven.getProjects(DefaultMaven.java:412)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:338)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:171)
at org.apache.maven.embedder.MavenEmbedder.execute(MavenEmbedder.java:689)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:372)
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:585)
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)
XXXX EXTENSION NULL, USING TYPE: pom (classifier=null, packaging=null)
[INFO] FOUND PLUGIN COMPONENT: org.codehaus.mojo:jboss-packaging-maven-plugin:2.0-SNAPSHOT (org.codehaus.mojo:jboss-packaging-maven-plugin) jar:file:/home/forge/.m2/repository/org/codehaus/mojo/jboss-packaging-maven-plugin/2.0-SNAPSHOT/jboss-packaging-maven-plugin-2.0-S
NAPSHOT.jar!/META-INF/maven/plugin.xml [KEY: org.codehaus.mojo:jboss-packaging-maven-plugin] collector: org.apache.maven.plugin.MavenPluginCollector@17182c1
[INFO] FOUND PLUGIN COMPONENT: org.codehaus.mojo:jboss-packaging-maven-plugin:2.0-SNAPSHOT (org.codehaus.mojo:jboss-packaging-maven-plugin) jar:file:/home/forge/.m2/repository/org/codehaus/mojo/jboss-packaging-maven-plugin/2.0-SNAPSHOT/jboss-packaging-maven-plugin-2.0-S
NAPSHOT.jar!/META-INF/maven/plugin.xml [KEY: org.codehaus.mojo:jboss-packaging-maven-plugin] collector: org.apache.maven.plugin.MavenPluginCollector@18fd984
[INFO] Got 14 ArtifactHandlers from plugin jboss-packaging-maven-plugin
[INFO] Handler: org.apache.maven.artifact.handler.DefaultArtifactHandler@12152e6 (packaging: javadoc classifier=javadoc extension=jar)
[INFO] Handler: org.apache.maven.artifact.handler.DefaultArtifactHandler@f99ff5 (packaging: jar classifier=null extension=spring)
XXXX EXTENSION NULL, USING TYPE: jar (classifier=null, packaging=jar)
[INFO] Handler: org.apache.maven.artifact.handler.DefaultArtifactHandler@c9ba38 (packaging: jar classifier=null extension=jar)
[INFO] Handler: org.apache.maven.artifact.handler.DefaultArtifactHandler@1e859c0 (packaging: ejb classifier=client extension=jar)
[INFO] Handler: org.apache.maven.artifact.handler.DefaultArtifactHandler@1ded0fd (packaging: jar classifier=tests extension=jar)
[INFO] Handler: org.apache.maven.artifact.handler.DefaultArtifactHandler@7a84e4 (packaging: java-source classifier=sources extension=jar)
XXXX EXTENSION NULL, USING TYPE: ejb3 (classifier=null, packaging=ejb3)
[INFO] Handler: org.apache.maven.artifact.handler.DefaultArtifactHandler@1aaa14a (packaging: ejb3 classifier=null extension=ejb3)
XXXX EXTENSION NULL, USING TYPE: ear (classifier=null, packaging=ear)
[INFO] Handler: org.apache.maven.artifact.handler.DefaultArtifactHandler@1430b5c (packaging: ear classifier=null extension=ear)
[INFO] Handler: org.apache.maven.artifact.handler.DefaultArtifactHandler@74c3aa (packaging: jar classifier=null extension=sar)
[INFO] Handler: org.apache.maven.artifact.handler.DefaultArtifactHandler@1e0be38 (packaging: ejb classifier=null extension=jar)
XXXX EXTENSION NULL, USING TYPE: war (classifier=null, packaging=war)
[INFO] Handler: org.apache.maven.artifact.handler.DefaultArtifactHandler@15c7850 (packaging: war classifier=null extension=war)
XXXX EXTENSION NULL, USING TYPE: par (classifier=null, packaging=par)
[INFO] Handler: org.apache.maven.artifact.handler.DefaultArtifactHandler@16a9d42 (packaging: par classifier=null extension=par)
[INFO] Handler: org.apache.maven.artifact.handler.DefaultArtifactHandler@9ed927 (packaging: maven-plugin classifier=null extension=jar)
[INFO] Handler: org.apache.maven.artifact.handler.DefaultArtifactHandler@c2a132 (packaging: pom classifier=null extension=pom)
[INFO] ----------------------------------------------------------------------------
[INFO] Building Unnamed - testing:jboss-sar-test:jboss-sar:0.1-SNAPSHOT
[INFO] task-segment: [install]
[INFO] ----------------------------------------------------------------------------
In the [INFO] Handler list the jboss-sar plugin doesn't occur.
Also note the different hashCodes for MavenPluginCollector.
On a side note, when using plexus-1.0-alpha-10-SNAPSHOT (the above is with alpha-9) I continuously get errors for not being able to find
any plugin descriptor - this is because the MavenPluginCollector instance is different in any invocation.
I've tried setting instantiation-stratety to 'once' or 'once-per-session' but that didn't help.
So probably a bug is fixed in plexus alpha-10 that's still in here which causes things to 'work' more or less.
+ Error stacktraces are turned on.
Maven version: 2.1-SNAPSHOT
[INFO] Scanning for projects...
No artifact handler for type jboss-sar - using a default handler
java.lang.Throwable
at org.apache.maven.artifact.handler.manager.DefaultArtifactHandlerManager.getArtifactHandler(DefaultArtifactHandlerManager.java:42)
at org.apache.maven.artifact.factory.DefaultArtifactFactory.createArtifact(DefaultArtifactFactory.java:153)
at org.apache.maven.artifact.factory.DefaultArtifactFactory.createArtifact(DefaultArtifactFactory.java:114)
at org.apache.maven.artifact.factory.DefaultArtifactFactory.createArtifact(DefaultArtifactFactory.java:108)
at org.apache.maven.artifact.factory.DefaultArtifactFactory.createBuildArtifact(DefaultArtifactFactory.java:72)
at org.apache.maven.project.DefaultMavenProjectBuilder.processProjectLogic(DefaultMavenProjectBuilder.java:903)
at org.apache.maven.project.DefaultMavenProjectBuilder.buildInternal(DefaultMavenProjectBuilder.java:754)
at org.apache.maven.project.DefaultMavenProjectBuilder.buildFromSourceFileInternal(DefaultMavenProjectBuilder.java:425)
at org.apache.maven.project.DefaultMavenProjectBuilder.build(DefaultMavenProjectBuilder.java:194)
at org.apache.maven.DefaultMaven.getProject(DefaultMaven.java:580)
at org.apache.maven.DefaultMaven.collectProjects(DefaultMaven.java:512)
at org.apache.maven.DefaultMaven.getProjects(DefaultMaven.java:412)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:338)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:171)
at org.apache.maven.embedder.MavenEmbedder.execute(MavenEmbedder.java:689)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:372)
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:585)
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)
XXXX EXTENSION NULL, USING TYPE: pom (classifier=null, packaging=null)
[INFO] FOUND PLUGIN COMPONENT: org.codehaus.mojo:jboss-packaging-maven-plugin:2.0-SNAPSHOT (org.codehaus.mojo:jboss-packaging-maven-plugin) jar:file:/home/forge/.m2/repository/org/codehaus/mojo/jboss-packaging-maven-plugin/2.0-SNAPSHOT/jboss-packaging-maven-plugin-2.0-S
NAPSHOT.jar!/META-INF/maven/plugin.xml [KEY: org.codehaus.mojo:jboss-packaging-maven-plugin] collector: org.apache.maven.plugin.MavenPluginCollector@17182c1
[INFO] FOUND PLUGIN COMPONENT: org.codehaus.mojo:jboss-packaging-maven-plugin:2.0-SNAPSHOT (org.codehaus.mojo:jboss-packaging-maven-plugin) jar:file:/home/forge/.m2/repository/org/codehaus/mojo/jboss-packaging-maven-plugin/2.0-SNAPSHOT/jboss-packaging-maven-plugin-2.0-S
NAPSHOT.jar!/META-INF/maven/plugin.xml [KEY: org.codehaus.mojo:jboss-packaging-maven-plugin] collector: org.apache.maven.plugin.MavenPluginCollector@18fd984
[INFO] Got 14 ArtifactHandlers from plugin jboss-packaging-maven-plugin
[INFO] Handler: org.apache.maven.artifact.handler.DefaultArtifactHandler@12152e6 (packaging: javadoc classifier=javadoc extension=jar)
[INFO] Handler: org.apache.maven.artifact.handler.DefaultArtifactHandler@f99ff5 (packaging: jar classifier=null extension=spring)
XXXX EXTENSION NULL, USING TYPE: jar (classifier=null, packaging=jar)
[INFO] Handler: org.apache.maven.artifact.handler.DefaultArtifactHandler@c9ba38 (packaging: jar classifier=null extension=jar)
[INFO] Handler: org.apache.maven.artifact.handler.DefaultArtifactHandler@1e859c0 (packaging: ejb classifier=client extension=jar)
[INFO] Handler: org.apache.maven.artifact.handler.DefaultArtifactHandler@1ded0fd (packaging: jar classifier=tests extension=jar)
[INFO] Handler: org.apache.maven.artifact.handler.DefaultArtifactHandler@7a84e4 (packaging: java-source classifier=sources extension=jar)
XXXX EXTENSION NULL, USING TYPE: ejb3 (classifier=null, packaging=ejb3)
[INFO] Handler: org.apache.maven.artifact.handler.DefaultArtifactHandler@1aaa14a (packaging: ejb3 classifier=null extension=ejb3)
XXXX EXTENSION NULL, USING TYPE: ear (classifier=null, packaging=ear)
[INFO] Handler: org.apache.maven.artifact.handler.DefaultArtifactHandler@1430b5c (packaging: ear classifier=null extension=ear)
[INFO] Handler: org.apache.maven.artifact.handler.DefaultArtifactHandler@74c3aa (packaging: jar classifier=null extension=sar)
[INFO] Handler: org.apache.maven.artifact.handler.DefaultArtifactHandler@1e0be38 (packaging: ejb classifier=null extension=jar)
XXXX EXTENSION NULL, USING TYPE: war (classifier=null, packaging=war)
[INFO] Handler: org.apache.maven.artifact.handler.DefaultArtifactHandler@15c7850 (packaging: war classifier=null extension=war)
XXXX EXTENSION NULL, USING TYPE: par (classifier=null, packaging=par)
[INFO] Handler: org.apache.maven.artifact.handler.DefaultArtifactHandler@16a9d42 (packaging: par classifier=null extension=par)
[INFO] Handler: org.apache.maven.artifact.handler.DefaultArtifactHandler@9ed927 (packaging: maven-plugin classifier=null extension=jar)
[INFO] Handler: org.apache.maven.artifact.handler.DefaultArtifactHandler@c2a132 (packaging: pom classifier=null extension=pom)
[INFO] ----------------------------------------------------------------------------
[INFO] Building Unnamed - testing:jboss-sar-test:jboss-sar:0.1-SNAPSHOT
[INFO] task-segment: [install]
[INFO] ----------------------------------------------------------------------------
Here is a demonstration project of the bug. It uses SWF and JBoss-SAR, though it seems any combination of external plugins (e.g. cargo uberwar) will have the same problem.
Just do an mvn install from the top level, and observe that what gets deployed to your repo has the extension .jboss-sar, rather than the more correct .sar.
I've also now tested it on 2.1.0-M1 - and that disappointingly also fails.
3.0-alpha-2 also fails (hard - it doesn't even create any artifacts at all) - but the 'alpha-2' is the hint here ![]()
This is similar to the behaviour I saw in MNG-1682 way back in Nov 2005 (though this bug is getting pretty close to it's 3rd birthday too...) - but I think then it could be produced with only 1 plugin-with-extensions, rather than the 2 here. It's a particularly nasty one, as it's come back to bite after lying dormant because we recently switched to flex-mojos which seems to have re-ignited this bug in our build. It took a few hours to track down why all of a sudden our artefacts were containing old build items (reason - the new ones had the wrong names in the repo, and those artifacts are later re-used in other artifacts further on).
I am of the opinion that this is a bug in Plexus.
I am really perplexed why the maven team chose to use Plexus over more popular, better implemented, and battled tested containers such as Spring and PicoContainer.
Even Bob Lee's Guice, which is a newer entry into DI and IoC would be an improvement. Other Apache projects are built on top of spring (CXF, ServiceMix, Camel), so not sure why maven couldn't be as well.
Plexus = Time and energy vampire.
I've attached a mojo that I'm using to work around this - it simply attaches a correctly named artifact if you put something like
<plugin>
<groupId>plexusbraindamage</groupId>
<artifactId>fix-mojo</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>frigextension</goal>
</goals>
<configuration>
<extension>sar</extension>
</configuration>
</execution>
</executions>
</plugin>
in your pom (or whatever you name your copy)
This bug can be worked around in any plugins that experience this problem, by adding something like this (I found this code in the Felix bundle plugin):
Artifact mainArtifact = currentProject.getArtifact();
// workaround for MNG-1682: force maven to install artifact using the "jar" handler
mainArtifact.setArtifactHandler( m_artifactHandlerManager.getArtifactHandler( "jar" ) );
Artifact mainArtifact = currentProject.getArtifact();
// workaround for MNG-1682: force maven to install artifact using the "jar" handler
mainArtifact.setArtifactHandler( m_artifactHandlerManager.getArtifactHandler( "jar" ) );
James,
How does this work with custom packaging and custom types declared in the component.xml? For example,
<extension>bin</extension>
<type>bin</type>
<packaging>bin-bundle</packaging>
Do I replace "jar" in the above example with "bin" or with "bin-bundle"?
Jason,
another workaround is you reference your ArtifactHandler directly as component. Supposed you defined an ArtifactHandler like this in components.xml:
<component>
<role>org.apache.maven.artifact.handler.ArtifactHandler</role>
<role-hint>product</role-hint>
<implementation>org.apache.maven.artifact.handler.DefaultArtifactHandler</implementation>
<configuration>
<type>product</type>
<includesDependencies>true</includesDependencies>
<language>java</language>
<extension>zip</extension>
<addedToClasspath>false</addedToClasspath>
</configuration>
</component>
then you can reference it from your Mojo with:
/**
- @component roleHint="product"
*/
private ArtifactHandler artifactHandler;
And set it to the artifact with:
project.getArtifact().setArtifactHandler(artifactHandler);
- @component roleHint="product" */ private ArtifactHandler artifactHandler;
Also reported as http://jira.codehaus.org/browse/MOJO-449
Related to http://jira.codehaus.org/browse/MNG-2240 ?