Le 5 juin 2014 19:44, "Denis Gervalle" <[email protected]> a écrit :
>
> On Thu, Jun 5, 2014 at 3:51 PM, Jeremie BOUSQUET <
[email protected]
> > wrote:
>
> > Hi,
> >
> >
> > 2014-06-05 15:10 GMT+02:00 Denis Gervalle <[email protected]>:
> >
> > > On Thu, Jun 5, 2014 at 2:27 PM, Thomas Mortagne <
> > [email protected]
> > > >
> > > wrote:
> > >
> > > > On Thu, Jun 5, 2014 at 2:14 PM, Denis Gervalle <[email protected]>
wrote:
> > > > > What happen if you also use dependency A not just because of B ?
> > > >
> > > > You put a dependency on A.
> > > >
> > >
> > > But you may not see that so easily when you change a few line in an
> > > existing module. Nothing will complains until you remove your deps to
B.
> > >
> > >
> > > >
> > > > > How do you determine "because of B" ?
> > > >
> > > > By thinking.
> > > >
> > >
> > > Ok, I rephrase my question.
> > > Could you define what you consider a usage of dependency A because of
B
> > and
> > > the opposite ?
> > >
> > >
> > If I understood, you depend on B, and by transitivity, you also depend
on A
> > (indirectly).
> > Then, from your module you use some classes of A (brought to you
> > indirectly, so "magically", it compiles).
> > So you never explicitly declare the dep on A from your module. If one
day
> > you remove dependency on B for any reason, you will also loose A (and
also
> > you can say it's an explicit dependency that is not "explicit", though
it's
> > a matter of taste or point of view to consider transitive deps not to be
> > explicit ...).
> >
> > The opposite would be to declare explicit dep on A from your module,
while
> > you don't need it at all - only B needs it.
> >
>
> You get it fully. The question is, could we define in a few word when the
> transitivity could be used, because the usage of A is just "because of" B
?
> Else, we should add a deps on A as soon as we import any class from A IMO.
>
>
> >
> >
> >
> > >
> > > >
> > > > >
> > > > > And what to you think of xwiki-commons-test-component that is a
deps
> > of
> > > > > xwiki-platform-core ?
> > > >
> > > > It's wrong IMO. Any forced dependency is wrong IMO.
> > > >
> > > > > Should we remove it ?
> > > >
> > > > Yes we should remove it.
> > > >
> > >
> > > Why do we get it ? Its removal could become an nightmare... but if we
> > agree
> > > on that, we should remove it ASAP.
> > >
> > >
> > > >
> > > > > What about deps for logging ?
> > > >
> > > > Depends how you use it, the logger used with @Inject is an official
> > > > feature of our component framework so xwiki-commons-component-api
> > > > should be enough.
> > > >
> > > > > And could we add xwiki-commons-stability (probably provided scope)
> > to a
> > > > > high level pom to avoid adding/removing it all the time ? (or
forget
> > > it,
> > > > > since it come with xwiki-commons-component-api currently) ?
> > > >
> > > > It's far from being used everywhere and there is no rule forcing to
> > > > use it, you set @Unstable when an API is unstable, it's not
forbidden
> > > > to not go through @Unstable. Plus you are supposed to remove that
> > > > annotation after some time.
> > > >
> > >
> > > Ok, so not deps at any scope in any high level poms. This seems
opposite
> > to
> > > what Sergiu proposed, but it would be nice to agree on a rule.
> > >
> > > To sum up, currently I am not sure the exception rule "because of" is
> > clear
> > > enough to not create confusion. I also agree with Sergiu that we
should
> > > list all (no warning of used deps not declared in
dependency:analysis),
> > > this make the rule clear at least. I am not against factoring common
> > > infrastructure in a single place, but Thomas seems to be clearly -1.
> > >
> >
> > I'm not sure it relates to what you describe above. Factoring deps in a
> > common infrastructure is more a matter of using dependencyManagement at
> > correct level (top-most usually), but the rule to declare only deps that
> > are really needed per module is a very widely used best practice.
> >
> > From a contributor (not committer) point of view, it's sometimes
annoying
> > to have to update your builds because of this kind of changes.
Obviously it
> > would be difficult to consider those dependency graphs as APIs :) , but
at
> > the same time when they evolve too frequently, it can be considered
painful
> > to follow by devs in general ...
> > Some are not impacting, but for example regarding @Unstable, if it's not
> > brought anymore by xwiki-commons-component-api, it will break my build
when
> > I upgrade xwiki versions.
> >
>
> This is bad, since I do not see any reason for xwiki-commons-component-api
> to bring xwiki-commons-stability to you.
>
>
> >
> > With Maven, it's not really a "bad" practice, to consider that some poms
> > are used mainly to bring to you a set of logically related dependencies
by
> > transitivity (there's even the "import" scope, though it's not the best
> > sample of good practice I agree). Question is more (case by case), is it
> > really "bad" to bring @Unstable by default to everyone that develops an
> > xwiki component, even if he will never use it / don't use it anymore ?
> >
>
> I would be positive, especially because it is not a runtime deps, and we
> can simply use the "provided" scope.
> Thomas do not seems to agree.

I agree with Thomas, forced dependencies in your build are bad. The only
forced dep I ever used in my root poms is junit, but here the objective was
really to force it ;)
In this case above, it would not be a pom really part of your build, but a
pom to be used as a dependency by devs users of xwiki apis. That's why I
talked about "import" scope, it's the typical use-case for it.
But I agree that in that case it's more maintenance work, additional poms
and deps graphs, so maybe not worth it at all.
I'm not sure I'd do it if I were you, even if I 'd find it nice as
contributor ;)

>
> All I really want at the end, is that we have clear rule.
> Unless we can define what "because of" is, the only rule I see valid
> currently, would be to explicitly depends on any module we do an import
> from.
>
>
> >
> > >
> > >
> > > It would be nice to have more feedback from other committers ! This is
> > not
> > > a minor aspect of our best practice IMO.
> > >
> > >
> > > >
> > > > >
> > > > > WDYT ?
> > > > >
> > > > >
> > > > >
> > > > > On Thu, Jun 5, 2014 at 11:42 AM, Thomas Mortagne <
> > > > [email protected]>
> > > > > wrote:
> > > > >
> > > > >> For me the rule to apply is simple: when you require dependency A
> > > > >> because of another dependency B (B expose A in it's API, you
> > implement
> > > > >> an interface of A to be found by B, etc.) you should not
explicitly
> > > > >> depend on A.
> > > > >>
> > > > >> On Thu, Jun 5, 2014 at 11:32 AM, Denis Gervalle <[email protected]>
> > > wrote:
> > > > >> > Hi devs,
> > > > >> >
> > > > >> > I am reviving this proposal since we never came to a
conclusion,
> > > and I
> > > > >> have
> > > > >> > the feeling that our deps become more and more convoluted.
> > > > >> >
> > > > >> > To resume what I get from past history with my own vision:
> > > > >> >
> > > > >> > 1) Since our modules are getting really modular, it should
never
> > > > silently
> > > > >> > depends on transitive dependency of another module (with IMO
some
> > > > >> > exception, see 3). So any undeclared deps found by
> > > dependency:analyse
> > > > >> > should be explicitly declare in the effective pom (Vincent POV
as
> > > > well)
> > > > >> > 2) Apply maven principle, we should reuse and apply
> > > > >> > convention-over-configuration
> > > > >> > over configuration, so common dependency like slf4j,
> > > > >> xwiki-commons-stability
> > > > >> > ? ... should be in a high level parent pom
> > > > >> > 3) We may rely on some very tight transitive dependency, for
> > > exemple,
> > > > it
> > > > >> > would be really curious that xwiki-commons-component-api stop
> > > > providing
> > > > >> > javax.inject, or that xwki-commons-test-components stop
providing
> > > > junit,
> > > > >> > mockito, and al.
> > > > >> >
> > > > >> > It would be nice to add those rules in our best practice and to
> > > always
> > > > >> > check our pom upon finishing changes in a module. The best
would
> > be
> > > to
> > > > >> > enforce those rules, but this is not easy since static
analysis is
> > > > >> limited
> > > > >> > and could create false positive.
> > > > >> >
> > > > >> > WDYT ?
> > > > >> >
> > > > >> >
> > > > >> > On Mon, Aug 15, 2011 at 10:31 PM, Thomas Mortagne <
> > > > >> [email protected]
> > > > >> >> wrote:
> > > > >> >
> > > > >> >> On Mon, Aug 15, 2011 at 9:25 PM, Vincent Massol <
> > > [email protected]>
> > > > >> >> wrote:
> > > > >> >> >
> > > > >> >> > On Aug 12, 2011, at 4:45 PM, Sergiu Dumitriu wrote:
> > > > >> >> >
> > > > >> >> >> On 08/12/2011 07:50 AM, Vincent Massol wrote:
> > > > >> >> >>> Hi devs,
> > > > >> >> >>>
> > > > >> >> >>> Running mvn dependency:dependency-analyze produces
> > interesting
> > > > >> results.
> > > > >> >> >>>
> > > > >> >> >>> For example:
> > > > >> >> >>>
> > > > >> >> >>> [INFO]
> > > > >> >>
> > > > >>
> > > >
> > >
> >
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
> > > > >> >> >>> [INFO] Building XWiki Commons - Properties 3.2-SNAPSHOT
> > > > >> >> >>> [INFO]
> > > > >> >>
> > > > >>
> > > >
> > >
> >
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
> > > > >> >> >>> …
> > > > >> >> >>> [INFO] --- maven-dependency-plugin:2.3:analyze
(default-cli)
> > @
> > > > >> >> xwiki-commons-properties ---
> > > > >> >> >>> [WARNING] Used undeclared dependencies found:
> > > > >> >> >>> [WARNING]    org.slf4j:slf4j-api:jar:1.6.1:compile
> > > > >> >> >>> [WARNING]    javax.inject:javax.inject:jar:1:compile
> > > > >> >> >>> [WARNING] Unused declared dependencies found:
> > > > >> >> >>> [WARNING]
> > > > >> >>
> > > >
 org.xwiki.commons:xwiki-commons-component-api:jar:3.2-SNAPSHOT:compile
> > > > >> >> >>> [WARNING]
> > > > >>  org.xwiki.commons:xwiki-commons-test:jar:3.2-SNAPSHOT:test
> > > > >> >> >>> [WARNING]
> > > >  org.hibernate:hibernate-validator:jar:4.2.0.Final:test
> > > > >> >> >>> [WARNING]    org.hamcrest:hamcrest-core:jar:1.1:test
> > > > >> >> >>> [WARNING]    org.jmock:jmock:jar:2.5.1:test
> > > > >> >> >>>
> > > > >> >> >>> The question is (for this module but more generally for
all
> > > > others):
> > > > >> >> >>> * Should we add slf4j and javax.inject reps in the pom.xml
> > for
> > > > this
> > > > >> >> module? (for ex today slf4j and javax.inject are found in the
> > > > >> component-api
> > > > >> >> dep)
> > > > >> >> >>>
> > > > >> >> >>> I think we should, wdyt?
> > > > >> >> >>
> > > > >> >> >> +1 as well.
> > > > >> >> >
> > > > >> >> > hmm actually we need to decide about the following:
> > > > >> >> >
> > > > >> >> > * In order to simplify writing pom.xml for modules having
> > > > components
> > > > >> >> (i.e. depending on xwiki-commons-component-api) I had added
the
> > > > >> following
> > > > >> >> to  xwiki-commons-component-api/pom.xml:
> > > > >> >> >
> > > > >> >> >    <!-- Make it easy for components that wish to log - They
> > don't
> > > > have
> > > > >> >> to explicitly import SLF4J -->
> > > > >> >> >    <dependency>
> > > > >> >> >      <groupId>org.slf4j</groupId>
> > > > >> >> >      <artifactId>slf4j-api</artifactId>
> > > > >> >> >    </dependency>
> > > > >> >> >
> > > > >> >> > * In the same manner we have a dependency on javax.inject in
> > > > >> >> xwiki-commons-component-api/pom.xml:
> > > > >> >> >
> > > > >> >> >    <!-- We add this dependency here so that users of the
> > > Component
> > > > API
> > > > >> >> just need to depend on this artifact and
> > > > >> >> >         don't have to explicitly add a dependency on
> > > > >> >> javax.inject:java.inject. -->
> > > > >> >> >    <dependency>
> > > > >> >> >      <groupId>javax.inject</groupId>
> > > > >> >> >      <artifactId>javax.inject</artifactId>
> > > > >> >> >      <version>1</version>
> > > > >> >> >    </dependency>
> > > > >> >> >
> > > > >> >> > So the question is: do we want to force each module
depending
> > on
> > > > >> >> xwiki-commons-component-api to have to declare an explicit
dep on
> > > > >> >> javax.inject and org.slf4j?
> > > > >> >> >
> > > > >> >> > I'm not so sure about that…
> > > > >> >>
> > > > >> >> I'm -0 and near -1 to list this kind of dependencies, using
slf4j
> > > or
> > > > >> >> javax.inject are what you HAVE TO use when you write an XWiki
> > > > >> >> component so it's redundant from my POV.
> > > > >> >>
> > > > >> >> >
> > > > >> >> > WDYT?
> > > > >> >> >
> > > > >> >> > Thanks
> > > > >> >> > -Vincent
> > > > >> >> >
> > > > >> >> >>> Note that the "Unused declared dependencies found:"
doesn't
> > > > always
> > > > >> >> generate correct results as is the case here. This is mostly
> > > because
> > > > >> it's a
> > > > >> >> static byte code check so any dep used at runtime will be
> > > considered
> > > > >> unused.
> > > > >> >> >>> See
> > > > >> >>
> > > > >>
> > > >
> > >
> >
http://www.sonatype.com/books/mvnex-book/reference/optimizing-sect-dependency-plugin.html
> > > > >> >> >>
> > > > >> >> >> Some of these dependencies are not used directly by us, but
> > are
> > > > >> needed
> > > > >> >> >> transitively by another library. For example, slf4j needs
> > > logback,
> > > > >> which
> > > > >> >> >> we never use directly (although we don't really declare it
in
> > > > every
> > > > >> >> >> module that does logging). Hibernate needs us to pick a
> > cache, a
> > > > >> >> >> connection pool, validator, and a bytecode manipulation
> > utility.
> > > > So
> > > > >> yes,
> > > > >> >> >> we can safely ignore most of these false negatives, but we
> > > should
> > > > >> still
> > > > >> >> >> try to remove those that are really wrongfully declared as
> > > > >> dependencies.
> > > > >> >> >>
> > > > >> >> >>> Thanks
> > > > >> >> >>> -Vincent
> > > > >> >> >
> > > > >> >> > _______________________________________________
> > > > >> >> > devs mailing list
> > > > >> >> > [email protected]
> > > > >> >> > http://lists.xwiki.org/mailman/listinfo/devs
> > > > >> >> >
> > > > >> >>
> > > > >> >>
> > > > >> >>
> > > > >> >> --
> > > > >> >> Thomas Mortagne
> > > > >> >> _______________________________________________
> > > > >> >> devs mailing list
> > > > >> >> [email protected]
> > > > >> >> http://lists.xwiki.org/mailman/listinfo/devs
> > > > >> >>
> > > > >> >
> > > > >> >
> > > > >> >
> > > > >> > --
> > > > >> > Denis Gervalle
> > > > >> > SOFTEC sa - CEO
> > > > >> > _______________________________________________
> > > > >> > devs mailing list
> > > > >> > [email protected]
> > > > >> > http://lists.xwiki.org/mailman/listinfo/devs
> > > > >>
> > > > >>
> > > > >>
> > > > >> --
> > > > >> Thomas Mortagne
> > > > >> _______________________________________________
> > > > >> devs mailing list
> > > > >> [email protected]
> > > > >> http://lists.xwiki.org/mailman/listinfo/devs
> > > > >>
> > > > >
> > > > >
> > > > >
> > > > > --
> > > > > Denis Gervalle
> > > > > SOFTEC sa - CEO
> > > > > _______________________________________________
> > > > > devs mailing list
> > > > > [email protected]
> > > > > http://lists.xwiki.org/mailman/listinfo/devs
> > > >
> > > >
> > > >
> > > > --
> > > > Thomas Mortagne
> > > > _______________________________________________
> > > > devs mailing list
> > > > [email protected]
> > > > http://lists.xwiki.org/mailman/listinfo/devs
> > > >
> > >
> > >
> > >
> > > --
> > > Denis Gervalle
> > > SOFTEC sa - CEO
> > > _______________________________________________
> > > devs mailing list
> > > [email protected]
> > > http://lists.xwiki.org/mailman/listinfo/devs
> > >
> > _______________________________________________
> > devs mailing list
> > [email protected]
> > http://lists.xwiki.org/mailman/listinfo/devs
> >
>
>
>
> --
> Denis Gervalle
> SOFTEC sa - CEO
> _______________________________________________
> devs mailing list
> [email protected]
> http://lists.xwiki.org/mailman/listinfo/devs
_______________________________________________
devs mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/devs

Reply via email to