On Thu, Jun 5, 2014 at 3:42 PM, Thomas Mortagne <[email protected]> wrote:
> On Thu, Jun 5, 2014 at 3:10 PM, Denis Gervalle <[email protected]> wrote: > > 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. > > If all your are saying here is that we don't have tools to enforce > that rule then yes we don't have tool to enforce that rule but we > don't have any to apply any of the proposed rules so far. > > The only tool we have is going to force you put a dependency on each > and every import you have. Do you really want to apply that ? > If this is the best way to have a consistent usage of dependencies and to keep it up to date, why not ? > > > > > > >> > >> > 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 ? > > I'm not going to copy/paste a dictionary definition of "because of". > If you cannot define the rule, you can apply it, that's all. > It's pretty obvious to me why I'm using an API, if B is not in the > equation does my code still work ? > It is not that obvious, your code is not a monolith. > > > > > > >> > >> > > >> > 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. > > Yes if we agree on that we should remove it. You don't have such > forced dependency on commons and it does not make it a nightmare... > You missed my point, removing it now could become a nightmare, and keeping it further surely increase it. I completely agree that if we do not want any useless deps in our module, we should not add such "global" deps. > > > > > > >> > >> > 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. > > No forced dependency if it's possible any if the submodule won't need > it. It can make sense in some very specific use cases where all > submodules will have this dependency or else they have nothing to do > here (for example dependency on rendering-api in > xwiki-platform-rendering) but it's certainly not true for something > like root commons or platform pom. > > > > > 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. > > > > 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 > > > > -- > 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

