On 19/03/2009, Stephen Connolly <[email protected]> wrote:
> 2009/3/19 sebb <[email protected]>
>
>
>  > On 19/03/2009, Rusty Wright <[email protected]> wrote:
>  > > Do the imports only have an effect at compile time?  For example, if you
>  > > have
>  > >
>  > >   package impl.zzz;
>  > >
>  > >   import api.yyy.Yyy;
>  > >
>  > >   public class Xyz implements Yyy {
>  > >   }
>  > >
>  > >  When you run the app the jvm won't need to have the yyy.Yyy class
>  > > available?
>  >
>  > Yes, that's what I wrote.
>  >
>  > At runtime:
>  > - annotation jars are not needed
>
>
>
> Only if they have a retention of compile.... if they are retained at runtime
>  you'll need them on the classpath
>
>
>
>  >
>  > - code jars are needed, but they may be different from the ones used to
>  > compile.
>  >
>  > Can I get back to my original question, which is:
>  >
>  > How does one express a dependency on a jar which is only needed at
>  > compile time, such that the dependency is not propagated?
>  >
>
>
> scope provided will do what you need afaik
>

Yes, but then AFAIK the user has to download and install the jar
separately, which is a pain.

>
>  >
>  > >  Even if that's true it seems dubious to me because it seems to me that
>  > that
>  > > means your code is always referring to the concrete class Xyz when it
>  > should
>  > > be using the interface Yyy.  For example, how could you do
>  > >
>  > >   Yyy y = new Xyz();
>  > >
>  > >  Would that run without the interface class on the classpath?
>  > >
>  > >
>  > >  sebb wrote:
>  > >
>  > > >
>  > > > On 18/03/2009, sebb <[email protected]> wrote:
>  > > >
>  > > > > AIUI, "compile" scope means compile, test and run, and generates a
>  > > > >  transitive dependency.
>  > > > >
>  > > > >  There are some dependencies that are compile-time only, for example
>  > > > >  annotations, and Java specification jars - i.e. API-only jars that
>  > > > >  have no implementation.
>  > > > >
>  > > > >  What is the best way to define such a dependency?
>  > > > >
>  > > > >  The Maven site suggests using "provided", but this does not solve
>  > the
>  > > problem.
>  > > > >
>  > > > >  Maybe there should be a"compile-only" scope?
>  > > > >
>  > > > >
>  > > >
>  > > > Note that in the case of annotation jars, these are not needed at
>  > > run-time.
>  > > >
>  > > > In the case of API-only jars, at run-time one would use a different
>  > > > jar which has the full implementation. This is useful for public specs
>  > > > which might not have open source implementations. The API-only jars
>  > > > allow one to compile.
>  > > >
>  > > >
>  > > ---------------------------------------------------------------------
>  > > > 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]
>  > >
>  > >
>  >
>  > ---------------------------------------------------------------------
>  > 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]

Reply via email to