Thanks Tim.  Enlightening.

-- Saleem

Tim Kettler wrote:
> 
> Hi,
> 
> I will try my best to explain how I understand the underlying concepts
> but as I'm not a maven developer and the code and design documentation
> is rather sparse there might be some misconceptions on my side.
> 
> What I'm a little bit confused about is the distinction between type and
> packaging. The termes are used somewhat interchangable in the pom and
> documentation: You give a 'packaging' for the artifact you build but
> declare the 'type' of dependencies. In the below text I will use them as 
> if they would mean the same.
> 
> For example when you build a j2ee app you would have a war project with
> the packaging set to 'war'. In the ear project you then declare the
> dependency to the war project with a type of 'war'.
> 
> Perhaps someone with more insight than me can explain why this
> distinction between packaging and type is made.
> 
> A maven artifact is identified by the coordinates
> groupId:artifactid:classifier:version:packaging (where a default
> packaging of kind 'jar' is assumed if no packaging is explicitly given).
> 
> What is going on behind the scences is this:
> 
> For each artifact-(type/packaging) there is an associated
> ArtifactHandler [1] either explicitly declared or implicitly created
> on the fly. An ArtifactHandler provides the file extension and default
> classifier for an artifact-type. The ArtifactHandler for a dependency is
> looked up in the ArtifactHandlerManager [2].
> 
> The ArtifactHandlers for the standard artifact-types are declared in
> this components.xml file [3].
> 
> When you declare this dependency:
> 
>    <dependency>
>      <groupId>com.myco.app</groupId>
>      <artifactId>foo</artifactId>
>      <version>1.0-SNAPSHOT</version>
>      <type>tests</type>
>    </dependency>
> 
> Maven looks up the ArtifactHandler for artifacts of type 'tests' in its
> ArtifactHandlerManager, since there is no such handler explicitly
> declared in [3] the DefaultArtifactHandlerManager [4] creates one on the
> fly based on the given type. This on-the-fly handler returns the value
> of the type for the extension and packaging ('tests' in this case). So
> the dependency given above resolves to this path in the repository:
> 
>    com/myco/app/foo/1.0-SNAPSHOT/foo-1.0-SNAPSHOT.tests
> 
> wich obviously doesn't exist. However, this dependency declaration
> should work:
> 
>    <dependency>
>      <groupId>com.myco.app</groupId>
>      <artifactId>foo</artifactId>
>      <version>1.0-SNAPSHOT</version>
>      <type>test-jar</type>
>    </dependency>
> 
> As there is a artifact handler defined for the type 'test-jar' that maps
> to a standard classifier of 'tests' and an extension of 'jar'. This
> should result in a repository path of:
> 
>    com/myco/app/foo/1.0-SNAPSHOT/foo-tests-1.0-SNAPSHOT.jar
> 
> Similar for this declaration:
> 
>    <dependency>
>      <groupId>com.myco.app</groupId>
>      <artifactId>foo</artifactId>
>      <version>1.0-SNAPSHOT</version>
>      <classifier>tests</classifier>
>    </dependency>
> 
> Here a default type of 'jar' is assumed which maps to an extension of
> 'jar' via the associated artifact handler. Together with the explicitly
> declared classifier one should end up with a path of:
> 
>    com/myco/app/foo/1.0-SNAPSHOT/foo-tests-1.0-SNAPSHOT.jar
> 
> PERIOD.
> 
> Sorry for this lengthy explanation, I hope it is somewhat understandable.
> 
> -Tim
> 
> [1]
> https://svn.apache.org/repos/asf/maven/components/branches/maven-2.0.x/maven-artifact/src/main/java/org/apache/maven/artifact/handler/ArtifactHandler.java
> [2]
> https://svn.apache.org/repos/asf/maven/components/branches/maven-2.0.x/maven-artifact/src/main/java/org/apache/maven/artifact/handler/manager/ArtifactHandlerManager.java
> [3]
> https://svn.apache.org/repos/asf/maven/components/branches/maven-2.0.x/maven-artifact/src/main/resources/META-INF/plexus/components.xml
> [4]
> https://svn.apache.org/repos/asf/maven/components/branches/maven-2.0.x/maven-artifact/src/main/java/org/apache/maven/artifact/handler/manager/DefaultArtifactHandlerManager.java
> 
> zalym schrieb:
>> Hi Tim,
>> 
>> totally out of scope, but i am curious.  what is this type identifier for
>> in
>> dependency?  and why is it resolved as period in the artifact?
>> 
>> Saleem
>> 
>> 
>> Tim Kettler wrote:
>>> zalym schrieb:
>>>> I followed the attached tests guide to create a dependency to my core
>>>> tests. 
>>>> The first part of the tutorial worked, and I could install a version of
>>>> the
>>>> test jar in the local repository as models-3.0-tests.jar.  When I tried
>>>> to
>>>> add this as a dependency in another project, it came up with a
>>>> dependency
>>>> missing error and when I noticed this in the message:
>>>> models-3.0.tests
>>>>
>>>> What could be wrong?  Why would the dependency be resolbed with a
>>>> period
>>>> and
>>>> not a hyphen.
>>> This is most probably a bug in the documentation. Looking at the mojo's 
>>> source code [1] shows that the artifact is created with a type of 
>>> 'test-jar' and the classifier 'tests'.
>>>
>>> You should try to use 'test-jar' as the type in your dependency 
>>> declaration or respectivly skip the type declaration and use a 
>>> <classifier>tests</classifier> element in the declaration.
>>>
>>> Please report this as a bug in jira [2] and provide the correct 
>>> dependency declaration to use.
>>>
>>>> Appreciate your help.
>>> -Tim
>>>
>>> [1] 
>>> https://svn.apache.org/repos/asf/maven/plugins/trunk/maven-jar-plugin/src/main/java/org/apache/maven/plugin/jar/TestJarMojo.java
>>> [2] http://jira.codehaus.org/browse/MNGSITE
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>>> For additional commands, e-mail: [EMAIL PROTECTED]
>>>
>>>
>>>
>> 
> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 
> 
> 

-- 
View this message in context: 
http://www.nabble.com/attached-tests-dependency-error-tf4489648s177.html#a12862545
Sent from the Maven - Users mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to