Unpacking seems to not work correctly indeed with classifiers.
Your patch is nice, but it modifies too much the artifact. The bug I think here 
is that the unpacked artifact doesn't include the extra attributes of the 
source artifact, they are lost. Once that fixed, you should then be able to 
specify a retrieve pattern like "myproject/lib/[artifact]_[classifier].[ext]"

If you want to contribute your patch, could you open a Jira ? A unit test is 
more than welcomed.

Nicolas

> Le 24 août 2015 à 10:27, Tamer Erdogan <tamer.erdo...@vasco.com> a écrit :
> 
> Thanks, I tried it again and it unpacked the artifact successfully. However 
> it would be nicer to put packaging attribute without extra namespace. Because 
> it can be added without extra namespace in the publications artifacts.
> 
> But now I have another problem. In dependency artifacts I have two artifacts 
> with classifiers as follow:
> 
> <dependencies>
>         <dependency org="org.myapp" name="hello-world" 
> rev="0.2.0-SNAPSHOT" conf="internal->default">
>             <artifact name="hello-world" ext="zip" e:packaging="zip" 
> e:classifier="windows-64" />
>             <artifact name="hello-world" ext="zip" e:packaging="zip" 
> e:classifier="linux-64" />
>         </dependency>
> <dependencies>
> 
> After running the retrieve command:
> java -jar $IVY_HOME/ivy-2.4.0.jar -settings "./ivysettings.xml" -ivy 
> "./ivy.xml" -retrieve "./dist/lib/[artifact]/[classifier].[ext]" -m2compatible
> In the output folder I have two unpackaged folders as follows:
> dist/lib/hello-world/windows-64
> dist/lib/hello-world/linux-64
> 
> But the problem is that the two folders have the same content. That means ivy 
> extracts only one of them. And it is randomly. Then I looked at the Ivy 
> source code and I think the problem is in 
> org.apache.ivy.core.pack.PackagingManager. Here is my diff:
> 
> # This patch file was generated by NetBeans IDE
> # It uses platform neutral UTF-8 encoding and \n newlines.
> --- <html>PackagingManager.java (<b>Aug 21, 2015 5:25:44 PM</b>)</html>
> +++ <html>PackagingManager.java (<b>Aug 21, 2015 5:32:57 PM</b>)</html>
> @@ -21,7 +21,6 @@
> import java.io.FileInputStream;
> import java.io.IOException;
> import java.io.InputStream;
> -import java.util.Map;
> import org.apache.ivy.core.module.descriptor.Artifact;
> import org.apache.ivy.core.module.descriptor.DefaultArtifact;
> import org.apache.ivy.core.settings.IvySettings;
> @@ -64,13 +63,13 @@
>               }
>               ext = packing.getUnpackedExtension(ext);
> 
> -             for (Map.Entry<Object, Object> entry : 
> artifact.getExtraAttributes().entrySet()) {
> -
> +             String classifier = "";
> +             if (artifact.getExtraAttribute("classifier") != null) {
> +                     classifier = "_" + 
> artifact.getExtraAttribute("classifier");
>               }
> -             String classifier = artifact.getExtraAttribute("classifier");
> 
>               DefaultArtifact unpacked = new 
> DefaultArtifact(artifact.getModuleRevisionId(),
> -                             artifact.getPublicationDate(), 
> artifact.getName(),
> +                             artifact.getPublicationDate(), 
> artifact.getName() + classifier,
>                               artifact.getType() + "_unpacked", ext);
> 
>               return unpacked;
> 
> Best regards
> Tamer Erdogan
> 
> 
> -----Original Message-----
> From: Jaikiran Pai [mailto:jai.forums2...@gmail.com] 
> Sent: Friday, August 21, 2015 22:59
> To: ivy-user@ant.apache.org
> Subject: Re: dependency packaging unpack problem
> 
> I just gave this a try and it worked for me. It could be that in your case 
> the unpacking is failing for some reason.
> 
> 
> <?xml version="1.0" encoding="UTF-8"?>
> <ivy-module version="2.0" xmlns:e="http://ant.apache.org/ivy/extra";>
>     <info organisation="org.myapp" module="foo-bar" 
> revision="0.1.0-SNAPSHOT"/>
> 
>     <configurations>
>         <conf name="internal" visibility="private"/>
>     </configurations>
> 
> ....
> 
>     <dependencies>
>         <dependency org="org.myapp" name="hello-world" 
> rev="0.2.0-SNAPSHOT" conf="internal->default">
>             <artifact name="hello-world" ext="zip" e:packaging="zip" />
>         </dependency>
> ...
>     </dependencies>
> </ivy-module>
> 
> 
> Then I run:
> 
> java -jar $IVY_HOME/ivy-2.4.0.jar -settings "./ivysettings.xml" -ivy 
> "./ivy.xml" -retrieve "./dist/lib/[artifact].[ext]" -sync -m2compatible
> 
> I see this log:
> 
> ...
> Unpacking org.myapp#hello-world;0.2.0-SNAPSHOT!hello-world.zip(zip)
> ...
> 
> and I see it extracted in the dist/lib folder. I'm using 2.4.0 of Ivy.
> 
> -Jaikiran
> 

Reply via email to