This page documents the current plan for reorganizing the Groovy code-base based on the
discussions and initial decisions from Groovy devcon3.
We are going to reorganize the sources and tests to separate:
This also means we should separate more cleanly:
Core languages classes are everything related to the core concepts of the language as well as the GDK. Library classes contain classes related to various APIs like JMX, Swing, and such. While module content usually require additional dependencies than the ones of the JDK and also usually follow their own release cycle.
Separating sources also means creating different artifact deliverables:
Having a small groovy-core library is particularly interesting for those wishing to integrate Groovy in their Java applications.
Regarding the tests, we should separate the 1.0 tests in a dedicated folder, while creating new folders for including "Groovy in Action" tests, new tests for 1.1 (with tests specific to Java 1.5 features), as well as tests for the TCK of JSR-241.
Replace the current Maven 1 build with an Ant build.
E.g. for now, assuming AntBuilder lives in bundled (not core) we could split the current AntTest in two, e.g. AntBuilderTest and AntBuilderExternalLibsTest. Any dependencies for AntBuilderTest must have compile or runtime scope in bundled.pom. The functionality represented in AntBuilderTest is what we advertise as "runs out of the box - for a full install". Anything in AntBuilderExternalLibsTest would also use jars in the external.pom file. We can then create a page like the ant optional task library dependencies page but I suggest we use pom format rather than listing jars individually.
So, going back to the AntBuilder example, the main functionality for AntBuilder would be covered in the AntBuilderTest which might require dependencies such as ant.jar and ant-launcher.jar. If we wanted ant junit task to also work out of the box we would have a test for it in AntBuilderTest and include ant-junit.jar as another of our dependencies. If not, we could still have a test for it in AntBuilderExternalLibsTest and it would get mentioned in external.pom. Ant tasks are probably not a good example here but as another example, any SqlTests which rely on a real database would be in SqlXxxExternalLibsTest. Unit tests or system/integration tests that only rely on JDBC core libraries would be part of either core or bundled poms.