Details
-
Type:
Bug
-
Status:
Closed
-
Priority:
Major
-
Resolution: Fixed
-
Affects Version/s: 2.1-beta-1
-
Fix Version/s: 2.3
-
Component/s: overlay
-
Labels:None
-
Environment:Apache Maven 2.2.1 (r801777; 2009-08-06 21:16:01+0200)
Java version: 1.6.0_18
Default locale: de_DE, platform encoding: Cp1252
OS name: "windows 7" version: "6.1" arch: "amd64" Family: "windows"
-
Number of attachments :
Description
I have an issue with the WAR overlay and an empty classifier.
My use case:
I am including an overlay with a "dynamic" classifier value. Meaning that I set the classifier either to an empty value "" (equivalent to no classifier for an artifact) or to a "test" value if the corresponding profile is activated.
<dependencies>
...
<dependency>
<groupId>org.jahia.server</groupId>
<artifactId>jahia-war</artifactId>
<version>1.0</version>
<classifier>${jahia.war.classifier}</classifier>
<type>war</type>
<scope>runtime</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<classifier>${jahia.war.classifier}</classifier>
<overlays>
<overlay>
<groupId>org.jahia.server</groupId>
<artifactId>jahia-war</artifactId>
<classifier>${jahia.war.classifier}</classifier>
<!-- files to exclude from the community -->
<excludes>
<exclude>gwt/**</exclude>
</excludes>
</overlay>
</overlays>
...
When I launch "normal" build (mvn clean package), the value of my classifier property ($
{jahia.war.classifier}) is empty and I am getting the following error:
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] overlay[ id org.jahia.server:jahia-war] is not a dependency of the project.
[INFO] ------------------------------------------------------------------------
[INFO] Trace
org.apache.maven.lifecycle.LifecycleExecutionException: overlay[ id org.jahia.server:jahia-war] is not a dependency of t
he project.
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:719)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalWithLifecycle(DefaultLifecycleExecutor.java:55
6)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:535)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures(DefaultLifecycleExecutor.jav
a: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.war.overlay.InvalidOverlayConfigurationException: overlay[ id org.jahia.server:jahia-
war] is not a dependency of the project.
at org.apache.maven.plugin.war.overlay.OverlayManager.getAssociatedArtifact(OverlayManager.java:223)
at org.apache.maven.plugin.war.overlay.OverlayManager.initialize(OverlayManager.java:146)
at org.apache.maven.plugin.war.overlay.OverlayManager.<init>(OverlayManager.java:76)
at org.apache.maven.plugin.war.AbstractWarMojo.buildWebapp(AbstractWarMojo.java:433)
at org.apache.maven.plugin.war.AbstractWarMojo.buildExplodedWebapp(AbstractWarMojo.java:394)
at org.apache.maven.plugin.war.WarMojo.performPackaging(WarMojo.java:195)
at org.apache.maven.plugin.war.WarMojo.execute(WarMojo.java:157)
at org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:490)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:694)
... 17 more
When I am debugging the execution of the code, I see that the comparison of the dependency artifact and the overlay in the
OverlayManager.compareOverlayWithArtifact(Overlay, Artifact) fails because the StringUtils.equals( overlay.getClassifier(), artifact.getClassifier()) results is false.
Looking at the values, I see the following:
overlay.getClassifier() == null
artifact.getClassifier() == ""
Thus comparing null to an empty string results in false.
Is there any chance in making this check more robust?
Thank you in advance!
Kind regards
Sergiy Shyrkov
Yes I have seen this before. The current handling and comparing of classifier is wrong in several of the archiving plugins. This needs to be corrected. There is an email thread about the subject on the dev-list a while back. I'll try to dig up a link to the mail archives.