TL;DR - Benedict is right. IMO Maven is a nice, straight-forward tool if you know what you’re doing and start on a _new_ project. But Maven easily becomes a pita if you want to do something that’s not supported out-of-the-box. I bet that Maven would just not work for C* source tree with all the little nice features that C*’s build.xml offers (just look at the scripted stuff in build.xml).
Eventually gradle would be an option; I proposed to switch to gradle several months ago. Same story (although gradle is better than Maven ;) ). But… you need to know that build.xml is not just used to build the code and artifacts. It is also used in CI, ccm, cstar-perf and a some other custom systems that exist and just work. So - if we would exchange ant with something else, it would force a lot of effort to change several tools and systems. And there must be a guarantee that everything works like it did before. Regarding IDEs: i’m using IDEA every day and it works like a charm with C*. Eclipse is ”supported natively” by ”ant generate-eclipse-files”. TBH I don’t know NetBeans. As Benedict pointed out, the code has improved and still improves a lot - in structure, in inline-doc, in nomenclature and whatever else. As soon as we can get rid of Thrift in the tree, there’s another big opportunity to cleanup more stuff. TBH I don’t think that (beside the tools) there would be a need to generate multiple artifacts for C* daemon - you can do ”separation of concerns” (via packages) even with discipline and then measure it. IMO The only artifact worth to extract out of C* tree, and useful for a (limited) set of 3rd party code, is something like ”cassandra-jmx-interfaces.jar” Robert > Am 02.04.2015 um 11:30 schrieb Benedict Elliott Smith > <belliottsm...@datastax.com>: > > There are three distinct problems you raise: code structure, documentation, > and build system. > > The build system, as far as I can tell, is a matter of personal preference. > I personally dislike the few interactions I've had with maven, but > gratefully my interactions with build system innards have been fairly > limited. I mostly just use them. Unless a concrete and significant benefit > is delivered by maven, though, it just doesn't seem worth the upheaval to > me. If you can make the argument that it actually improves the project in a > way that justifies the upheaval, it will certainly be considered, but so > far no justification has been made. > > The documentation problem is common to many projects, though: out of > codebase documentation gets stale very rapidly. When we say to "read the > code" we mean "read the code and its inline documentation" - the quality of > this documentation has itself generally been substandard, but has been > improving significantly over the past year or so, and we are endeavouring > to improve with every change. In the meantime, there are videos from a > recent bootcamp we've run for both internal and external contributors > http://www.datastax.com/dev/blog/deep-into-cassandra-internals. > > The code structure would be great to modularise, but the reality is that it > is not currently modular. There are no good clear dividing lines for much > of the project. The problem with refactoring the entire codebase to create > separate projects is that it is a significant undertaking that makes > maintenance of the project across versions significantly more costly. This > create a net drag on all productivity in the project. Such a major change > requires strong consensus, and strong evidence justifying it. So the > question is: would this create more new work than it loses? The evidence > isn't there that it would. It might, but I personally guess that it would > not, judging by the results of our other attempts to drive up contributions > to the project. Perhaps we can have a wider dialogue about the endeavour, > though, and see if a consensus can in fact be built. > > > > On Thu, Apr 2, 2015 at 9:31 AM, Pierre Devops <pierredev...@gmail.com> > wrote: > >> Hi all, >> >> Not a cassandra contributor here, but I'm working on the cassandra sources >> too. >> >> This big cassandra source root caused me trouble too, firstly it was not >> easy to import in an IDE, try to import cassandra sources in netbeans, it's >> a headcache. >> >> It would be great if we had more small modules/projects in separate POM. It >> will be more easier to work on small part of the project, and as a >> consequences, I'm sure you will have more external contribution to this >> project. >> >> I know cassandra devs are used to ant build model, but it's like a thread I >> opened about updated and more complete documentation about sstable >> structures. I got answer that it was not needed to understand how to use >> Cassandra, and the only way to learn about that is to rtfcode. Because >> people working on cassandra already know how sstable structure are, it's >> not needed to provide up to date documentation. >> So it will take me a very long time to read and understand all the >> serialization code in cassandra to understand the sttable structure before >> I can work on the code. Up to date documentation about internals would have >> gave me the knowledge I need to contribute much quicker. >> >> Here we have the same problem, we have a complex non modular build system, >> and core cassandra dev are used to it, so it's not needed to make something >> more flexible, even if it could facilite external contribution. >> >> >> >> 2015-03-31 23:42 GMT+02:00 Benedict Elliott Smith < >> belliottsm...@datastax.com>: >> >>> I think the problem is everyone currently contributing is comfortable >> with >>> ant, and as much as it is imperfect, it isn't clear maven is going to be >>> better. Having the requisite maven functionality linked under the hood >>> doesn't seem particularly preferable to the inverse. The status quo has >> the >>> bonus of zero upheaval for the project and its contributors, though, so >> it >>> would have to be a very clear win to justify the change in my opinion. >>> >>> >>> On Tue, Mar 31, 2015 at 10:24 PM, Łukasz Dywicki <l...@code-house.org> >>> wrote: >>> >>>> Hey Tyler, >>>> Thank you very much for coming back. I already lost faith that I will >> get >>>> reply. :-) I am fine with code relocations. Moving constants into one >>> place >>>> where they cause no circular dependencies is cool, I’m all for doing >> such >>>> thing. >>>> >>>> Currently Cassandra uses ant for doing some of maven functionalities >>> (such >>>> deploying POM.xml into repositories with dependency information), it >> uses >>>> also maven type of artifact repositories. This can be easily flipped. >>> Maven >>>> can call ant tasks for these parts which can not be made with existing >>>> maven plugins. Here is simplest example: >>>> http://docs.codehaus.org/display/MAVENUSER/Antrun+Plugin < >>>> http://docs.codehaus.org/display/MAVENUSER/Antrun+Plugin> - you can >> see >>>> ant task definition embedded in maven pom.xml. >>>> >>>> Most of things can be made at this moment via maven plugins: >>>> apache-rat-plugin: >>>> >> http://mvnrepository.com/artifact/org.apache.rat/apache-rat-plugin/0.11 >>> < >>>> >> http://mvnrepository.com/artifact/org.apache.rat/apache-rat-plugin/0.11> >>>> maven-thrift-plugin: >>>> >>> >> http://mvnrepository.com/artifact/org.apache.thrift.tools/maven-thrift-plugin/0.1.11 >>>> < >>>> >>> >> http://mvnrepository.com/artifact/org.apache.thrift.tools/maven-thrift-plugin/0.1.11 >>>>> >>>> antlr4-maven-plugin: >>>> http://mvnrepository.com/artifact/org.antlr/antlr4-maven-plugin/4.5 < >>>> http://mvnrepository.com/artifact/org.antlr/antlr4-maven-plugin/4.5> >> or >>>> antlr3-maven-plugin: >>>> http://mvnrepository.com/artifact/org.antlr/antlr3-maven-plugin/3.5.2 >> < >>>> http://mvnrepository.com/artifact/org.antlr/antlr3-maven-plugin/3.5.2> >>>> maven-gpg-plugin: >>>> >>> >> http://mvnrepository.com/artifact/org.apache.maven.plugins/maven-gpg-plugin/1.6 >>>> < >>>> >>> >> http://mvnrepository.com/artifact/org.apache.maven.plugins/maven-gpg-plugin/1.6 >>>>> >>>> maven-cobertura-plugin: >> http://mojo.codehaus.org/cobertura-maven-plugin/ >>> < >>>> http://mojo.codehaus.org/cobertura-maven-plugin/> (but these days >> jacoco >>>> with java agent instrumentation perfoms better) >>>> .. and so on >>>> >>>> I already made some evaluation of impact and it is big. Code has to be >>>> separated into different source roots. It’s not easy even for keeping >>>> current artifact structure: cassandra-all, cassandra-thrift and >>> clientutil >>>> (cause of cyclic dependencies). What I can do is prepare of these src >>> roots >>>> with dependencies which are declared for them and push that to my >>> cassandra >>>> fork so you will be able to verify that and continue with relocations >> if >>>> you will like new build. Creating new modules (source roots) with maven >>> is >>>> simple so you could possibly extract more than these 3 predefined >>>> artifacts/package roots. >>>> Just let me know if you are interested. >>>> >>>> Kind regards, >>>> Lukasz >>>> >>>> >>>>> Wiadomość napisana przez Tyler Hobbs <ty...@datastax.com> w dniu 31 >>> mar >>>> 2015, o godz. 21:57: >>>>> >>>>> Hi Łukasz, >>>>> >>>>> I'm not very familiar with the build system, but I'll try to respond. >>>>> >>>>> The Serializer dependencies on org.apache.cassandra.transport are >>> almost >>>>> certainly uses of Server.CURRENT_VERSION and Server.VERSION_3. These >>> are >>>>> constants that represent the native protocol version in use, which >>>> affects >>>>> how certain types are serialized. These constants could easily be >>> moved. >>>>> >>>>> The o.a.c.marshal dependency in MapSerializer is on AbstractType, but >>>> could >>>>> easily be replaced with java.util.Comparator. >>>>> >>>>> In any case, I'm not necessarily opposed to improving the build >> system >>> to >>>>> make these errors more apparent. Would your proposal still allow us >> to >>>>> build with ant (and just change the way those artifacts are built)? >>>>> >>>>> On Tue, Mar 24, 2015 at 7:58 PM, Łukasz Dywicki <l...@code-house.org >>>> <mailto:l...@code-house.org>> wrote: >>>>> >>>>>> Dear cassandra commiters and development process followers, >>>>>> I would like to bring an important topic off build process of >>>> cassandra. I >>>>>> am an external user from community point of view, however I been >>> walking >>>>>> around various projects close to cassandra over past year or even >>> more. >>>>>> What is worrying me a lot is how cassandra is publishing artifacts >> and >>>> how >>>>>> many problems are reported due that. >>>>>> >>>>>> First of all - I want to note that I am not born enemy of Ant >> itself. >>> I >>>>>> never used it. I am also aware of problems with custom builds made >>> with >>>>>> Maven, however I don’t really want to discuss any particular >>>> replacement, >>>>>> yet I want to note that Cassandra JIRA project contains about 116 >>> issues >>>>>> related somehow to maven (http://bit.ly/1GRoXl5 < >>> http://bit.ly/1GRoXl5> >>>> <http://bit.ly/1GRoXl5 <http://bit.ly/1GRoXl5>>, >>>>>> project=CASSANDRA, text ~ maven). Depends on the point of view it >>> might >>>> be >>>>>> a lot or a little. By simple statistics it is around 21 issues a >> year >>> or >>>>>> almost 2 issues a month, many of them breaking maintanance/major >>>> releases >>>>>> from user point of view. From other hand it’s not bad considering >> how >>>>>> project is being built. >>>>>> >>>>>> Current structure has a very big disadvantage - ONE source root for >>>>>> multiple artifacts published in maven repositories and copying >> classes >>>> to >>>>>> jar AFTER they are compiled. Obviously ant copy task doesn’t follow >>>> import >>>>>> statements and does not include dependant classes. For example just >> by >>>>>> making test relocations and extraction of clientutil jar on master >>>> branch >>>>>> into separate source root I have found a bug where ListSerializer >>>> depends >>>>>> on org.apache.cassandra.transpor package. More over clientutil >>>>>> (MapSerializer) does depends on org.apache.cassandra.db.marshal >>> package >>>>>> leading to the fact that it can not be used without cassandra-all >>>> present >>>>>> at classpath. >>>>>> Luckily for cassandra CQL as a new interface reduces thrift and >>>> clientutil >>>>>> usage reducing amount of issues reported around these, however this >>> just >>>>>> hides a real problem in previous paragraph. I have found a handy >> tool >>>> and >>>>>> made a graph of circular dependencies in cassandra-all.jar. Graph of >>>>>> results can found here: http://grab.by/FRnO <http://grab.by/FRnO> < >>>> http://grab.by/FRnO <http://grab.by/FRnO>>. As you >>>>>> can see this graph has multiple levels and solving it is not a >> simple >>>> task. >>>>>> I am afraid a current way of building and packaging cassandra can >>> create >>>>>> huge hiccups when it will come to code rafactorings cause entire >>>> cassandra >>>>>> will become a house of cards. >>>>>> Restructuring project into smaller pieces is also beneficiary for >>>>>> community since solving bugs in smaller units is definitelly easier. >>>>>> >>>>>> At the end of this mail I would like to propose moving Cassandra >> build >>>>>> system forward, regardless of tool which will be choosen for it. >>>> Personally >>>>>> I can volunteer in maven related changes to extract >> cassandra-thrift, >>>>>> cassandra-clientutil and cassandra-all to make regular maven build. >> It >>>>>> might be seen as a switch from one big XML into couple smaller. :-) >>> All >>>>>> this depends on Cassandra developers decission to devide source >> roots >>> or >>>>>> not. >>>>>> >>>>>> Kind regards, >>>>>> Łukasz Dywicki >>>>>> — >>>>>> l...@code-house.org >>>>>> Twitter: ldywicki >>>>>> Blog: http://dywicki.pl >>>>>> Code-House - http://code-house.org >>>>>> >>>>>> >>>>> >>>>> >>>>> -- >>>>> Tyler Hobbs >>>>> DataStax <http://datastax.com/ <http://datastax.com/>> >>>> >>>> >>> >> — Robert Stupp @snazy