[
https://jira.codehaus.org/browse/MNG-4455?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Paul Benedict updated MNG-4455:
-------------------------------
Fix Version/s: (was: Issues to be reviewed for 3.x)
> Pluggable Artifact types
> ------------------------
>
> Key: MNG-4455
> URL: https://jira.codehaus.org/browse/MNG-4455
> Project: Maven
> Issue Type: Improvement
> Components: Artifacts and Repositories
> Reporter: Kek
>
> First I want to thank to authors of great tool like Maven is.
> And now my wish for Maven improvement:
> Last week I try to make my first maven plugin to add support for my
> proprietary packaging, the inspiration was from
> http://stackoverflow.com/questions/1427722/how-do-i-create-a-new-packaging-type-for-maven.
>
> This works fine, but I need support following scenario:
> 1) In Project-X add dependency on Artifact-Y with packaging/type set to
> "MyArchive"
> 2) Maven resolves this dependency and downloads the artifact to local
> repository
> 3) When compilation or testing phase occures, the Artifact-Y:MyArchive should
> be unpacked to some location (when not already unpacked) and the location
> should be added as classpathElement to project classpath.
> I know, there is some possibility to use unpack-dependencies goal, but I need
> to unpack the dependency only ones and share it in multi-module project
> environment. And second problem is how to modify classpath to add the
> unpacked location. I found many questions about this functionality on many
> forums, but no solution. Many people want to add some folder to classpath,
> but no way. There was one - the system scope in dependency specification, but
> currently it does not support folders in path.
> So for my solution I create some specialized Mojo for this with following
> hack-code:
>
> Set<Artifact> artSet=project.getDependencyArtifacts();
> for(Artifact art:artSet){
> if("MyArchive".equals(art.getType())){
> File sharedFolder = new File("\\\\temp\\maven-shared")
> UnpackUtility.unpack(art.getFile(),sharedFolder);
> art.setFile(sharedFolder);
> art.setResolved(true);
> }
> }
> This works fine, but when I use this in M2Eclipse plugin, then the folder is
> not added to project classpath, because there is not my Mojo plugin executed
> during classpath resolution.
> I look at m2eclipse source codes and to Maven2 and Maven3 source codes and in
> my opinion the best way how to add support for this kind of issues ( when
> somebody want to define its own type of Artifact and provide some plugable
> logic for its resolution/initialization) will be:
> 1) add and call ArtifactHandler.getClassPathFile() instead of
> Artifact.getFile() to obtain reference to file or directory to be added to
> classpath - the ArtifactHandler could provide specialized implementation for
> different Artifact types as supported in current version.
> 2) OR add some support for plugable Artifact realizations by type, in current
> versions there is DefaultArtifactFactory used for Artifact creation like :
> ArtifactHandler handler = artifactHandlerManager.getArtifactHandler( type );
> return new DefaultArtifact( groupId, artifactId, versionRange, desiredScope,
> type, classifier, handler,optional );
> The code should be changed to:
> ArtifactHandler handler = artifactHandlerManager.getArtifactHandler( type );
> return handler.createArtifact( groupId, artifactId, versionRange,
> desiredScope, type, classifier,optional );
> Or the ArtifactFactory should be pluggable by Artifact-type in the same way
> as ArtifactHandler.
> Or some other solution.
> I could contribute these changes to Maven, but I'm not sure, what is the
> prefered way to follow Maven architecture ideas.
--
This message was sent by Atlassian JIRA
(v6.1.6#6162)