Hi,
First and foremost, NPanday needs to become useful, otherwise it's just
going to be a really cool project which brings maven's power to nobody.
Not that I want to threaten :) but NuGet is on a feature spree and is
useful to some extent to many developers (last time I downloaded the
entire repo from Microsoft I got some ~4K packages).
In order for NPanday to be useful, it doesn't need much. It just needs to:
1. Respect scopes and
2. Start using maven to do the job (as Lars pointed out) instead of
"resolving" artifacts from the Addin's code (the code is, ahem, and
doesn't really work).
My 2 st.
Stoyan
On 11/9/11 8:04 PM, "Lars Corneliussen" <[email protected]> wrote:
>Stoyan brought me back to this question, and I think we have to
>reevaluate what we have said earlier. We all are biased on this topic.
>Sometimes we like it if transitive dependencies would be included,
>sometimes not. :-)
>
>Our Position So Far
>A transitive dependency is a dependency of your dependency; if you
>reference a class from it, it becomes YOUR DIRECT dependency, and hence
>should be declared in YOUR pom.
>
>Even if I like this sentence (because it looks smart and theroetically
>right) there might be NO VALUE in it.
>
>Our Arguments
>Beyond theory i can find two arguments for this position:
>
>1) You should not reference classes or functionality from others'
>dependency, because they are out of your control?
>
>But, this is not really correct. The sub dependencies are fixed per
>version of your dependency; so they are in your control. Subdependencies
>can change with new versions, but so can classes in your direct
>dependency.
>
>2) You shouldn't encourage yourself and your developers to directly use
>functionality from transitive dependencies (which you would do if you
>automatically add them to project references in VS)
>
>That seems to be a real issue on the first glance - but just we do not
>properly support dependency scopes. But reread the 'Dependency
>Scope'-Section here:
>http://maven.apache.org/guides/introduction/introduction-to-dependency-mec
>hanism.html
>
>Isn't the scope 'runtime' exactly what you are looking for then? It would
>be included on test runs and runtime, but not on compile.
>dotnet-executable, dotnet-archive (not implemented yet!), nar and asp
>could automatically resolve these for runtime.
>
>Any more?
>
>Suggestion
>
>I did not, but now i do agree with Stoyan: we should make NPanday expand
>transitive dependencies of scope 'compile' in normal projects, and of
>scope 'runtime' in executables and web projects.
>
>Maybe we can tweak the UI to show extra information on the References?
>Grey out transitive ones, show the scope?
>
>And we should not replicate this logic in NPanday, but instead rely on
>Maven Java code to resolve dependencies - either through CLI or IKVM.
>
>What do you think?
>
>_
>Lars
>
>
>
>Can you think of ANY EXAMPLE, where you would have a compile
>
>
>Am 05.04.2011 um 18:57 schrieb Lars Corneliussen:
>
>> Hi,
>>
>> A transitive dependency is a dependeny of your dependency.
>>
>> If you reference a class of that "transitive" dependency, it is not a
>>dependency of your dependency anymore. It's now also your direct
>>dependency and hence SHOULD be declared in the POM.
>>
>> _
>> Lars
>>
>> Am 05.04.11 18:32, schrieb Brett Porter:
>>> You're correct, and I think it is behaving as you expect.
>>>
>>> What I'm trying to be clear on (which is sometimes hard without
>>>pictures):
>>>
>>> Let's say B depends on C. Let's say your current project's source code
>>>uses classes from all of A, B and C.
>>>
>>> You should declare all 3 dependencies, because you need to compile
>>>against them. You shouldn't rely on not declaring C because B will
>>>bring it in - because B might later change not to, or use a different
>>>version.
>>>
>>> Now, if you just use A, B - you only compile against A, B, but you run
>>>against A, B, C (because B needs C to run).
>>>
>>> The problem in Java is if C contains an abstract class implemented in
>>>B, you need to compile against C, even if you only use classes from A
>>>and B.
>>>
>>> :)
>>>
>>> On 06/04/2011, at 2:11 AM, Khai Do wrote:
>>>
>>>> Hi Brett. Maybe I don't understand. What do you mean when you say
>>>>".NET is not burdened the same way"? As a best practice (for java
>>>>projects) I follow the pattern of only referencing top level modules
>>>>and letting maven resolve all the transitive dependencies for me on
>>>>compile. I believe this is the definition of dependency management.
>>>>It seems like your suggesting that .NET is not build the same way and
>>>>I shouldn't follow this pattern for npanday builds? Wouldn't this
>>>>break maven's dependency management feature? -Khai
>>>>
>>> --
>>> Brett Porter
>>> [email protected]
>>> http://brettporter.wordpress.com/
>>> http://au.linkedin.com/in/brettporter
>>>
>>>
>>>
>>>
>>
>