2009/3/19 sebb <[email protected]>

> 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.
>

Nope....

provided just says that somebody will provide it for you and that maven does
not need to worry about it.


>
> >
> >  >
> >  > >  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