Dear contributor, For full instructions and information on what this project contains, run: > ant help If you want to get started quickly: 1. Run `ant eclipse`. 2. Start up eclipse (https://www.eclipse.org/). 3. In the menu: File > Import... > Existing Project Into Workspace 4. Browse to this directory and import it: (${basedir}) 5. In eclipse: Run > Debug configurations... > then pick one of the configs named `Lombok test`. 6. Run `ant dist`. Have fun! Just want to get started quickly? Run: > ant quickstart --- Lombok is specced to run on a wide array of underlying platforms: * Any JVM from 1.6 up to the upcoming next official release. * Javac, from 1.6 up to the upcoming next official release. * ECJ, from ecj 4.4.2 (2015/java8) up to the upcoming next official release. * Eclipse, from eclipse-oxygen up to the upcoming next official release. The build is a little more complicated to cater to these requirements. This build script can perform the following tasks: * IDE Create project files so that you can work on lombok in eclipse or intellij. Includes creating debuggable test targets. * compile Turn java files into class files. * test Run the tests against the various combinations of VM, Javac, eclipse and ecj we support, including finding suitable VMs to run them on. * packaging Create the lombok 'everything' jar, that can serve as eclipse agent, as installer, as library you include on the classpath with javac, and which does not inject its transitive dependencies into your project namespace. * website Builds the website and documentation (projectlombok.org) from templates, including creating the version history page and changelog, and deploying builds to the website (and the maven repo hosted there). * p2 We host an experimental eclipse marketplace installer. For more info on any of these sections, run for example `ant help.IDE`. If you're new to lombok, you should start with `ant help.IDE`, then move on to `ant help.test`. We strongly suggest you use eclipse to develop lombok. Experimentally, developing with intellij is possible as well. IDE support consists of two features: 1. Generate project files so that this directory can be imported as project. 2. Generate debug/run launch files so you can debug lombok in your IDE. > ant eclipse > ant intellij These commands generate project files and download all dependencies required to develop Project Lombok in the named IDE. Run these commands first, then import this directory as project in your IDE. > ant eclipse.testtarget.eclipse > ant eclipse.testtarget.ecj > ant eclipse.testtarget.javac These 3 commands generate launch targets (these appear in your debug menu), for testing the stated platform (eclipse, ecj, or javac) and will ask you which version of the VM and the relevant platform are to be targeted by these tests. Note that `ant eclipse` already generates default test targets, you don't need these unless you're specifically testing lombok behaviour on some specific version of the JVM or a target platform. NB: No debug/launch targets are currently generated for intellij. Got the know how? We'd love a contribution! The build compilation system is self contained and generally invoked by the other jobs this build script can do; you rarely need to mess with it. The compilation is quite complicated; parts of lombok are injected into for example eclipse at runtime via an agent mechanism. To produce the bytecode that is to be injected, we need to compile against various different versions of the core java libraries as well as eclipse/ecj. To make this process smooth and fast, lombok has a 'stubs' concept: We have signature-only versions of various classes of other libraries. We compile these first, then we compile the rest of lombok with these stub classes on the classpath, and then we package lombok without the stubs. Various bits of lombok are targeted at different versions, and therefore, different parts of lombok are compiled with different `-release` targets. > ant compile Compiles lombok itself > ant compile.support Compiles code that isn't part of the lombok distribution, but which is used for other jobs; For example, eclipse debug target generation, and fetching the current lombok stable release version number on offer at the projectlombok.org website involve java code. Lombok is shipped as an 'everything' jar; it is a stand-alone java app, with both a GUI and a command line interface, it's an agent, it's an annotation processor, and it's a module. In addition, lombok is a compile-time only dependency, designed to be included in every project a lombok user has. Therefore, we don't want any of the lombok classes that you aren't meant to use directly to be visible, showing up in auto-complete dialogs. Starting with JDK9, the module system's 'export' feature does a lot of this, but we also want to avoid contaminating things on JDK8 and below. As a consequence, lombok uses a classloader system, and most classes are included in the jar with a different name, not as .class files, thus avoiding contaminating the namespace. The packaging targets take care of setting up the file rename as well as registering all the various manifest and file entries needed so that lombok can be an everything jar. > ant dist packages the lombok build into a single jar. > ant maven > ant maven.publish 'maven' packages the lombok build ready to upload to mavencentral (sonatype). 'maven.publish' also sends this via the lombok server to oss.sonatype.org. Lombok tests need to be run against a targeted platform. > ant test.javacCurrent > ant test.javac6 > ant test.javac8 > ant test.javac11 > ant test.javac14 This runs the test suite that tests lombok on javac, as well as testing the delombok feature. `javacCurrent` runs the tests on the JVM running this build: ${ant.java.version} `javac6` and `javac8` are run on the JVM running this build, by downloading the complete java runtime classes from those versions, including javac, and using module limits to exclude your VM's own javac. You _DO NOT_ need an installed JDK1.6 or JDK1.8 to run these. `javac11`, `javac14`, etc require that you have a JDK of that version installed on your system. The build will automatically find such a JDK in most cases; alternatively, the system will ask you to provide a path to them. The tests are then run by invoking that VM to run them. You can force a particular VM by making a file named `jvm.locations`, and putting in it, for example: j11 = /Library/Java/JavaVirtualMachines/jdk-11.jdk/Contents/Home Or just enter the path your VM installation when prompted, and the build will automatically create this file for you to remember your choice. > ant test.eclipse-oxygen > ant test.eclipse-202006 This runs the test suite that tests lombok on eclipse/ecj. The tests are run on your current VM (${ant.java.version}), fetching the relevant bits of the chosen eclipse release to test against. > ant test Runs the 'default' targets for all supported platforms. This should catch most problems. > ant test.broad Runs tests against a selection of versions designed to catch virtually all problems. Doesn't quite test _every_ supported combination. > ant test.compile Compiles the test suite; generally invoked by the other test targets; you don't need to explicitly invoke this yourself. This build also builds the website, which is a static site generated via freemarker templates. Parts of the site build also involve other custom software, such as building the 'all available versions' page by checking the available versions on the live website, compiling markdown (as used by the changelog) into html, and generated color-coded syntax in HTML for the example snippets. > ant changelog.build Turns the changelog at doc/changelog.markdown into build/website/changelog.html. > ant website.build > ant website.pack > ant website.publish 'build' Builds the website (by for example applying freemarker templates) into build/website. 'pack' bzips this up, ready to ship to the server. 'publish' sends this to the server and runs a script to deploy. > ant latest-changes.build Makes a changelog variant that lists only the newest changes; it is included in the distribution for convenience. > ant javadoc.build > ant javadoc.pack > ant javadoc.publish 'build' Builds the javadoc into build/api. 'pack' bzips this up, ready to ship to the server. 'publish' sends this to the server and runs a script to deploy. > ant edge.pack > ant edge.publish 'pack' creates a bzip with all relevant files needed to deploy a new edge release to the server: A fresh build of the lombok everything jar, plus the maven repo update so that the edge release can be fetched as a maven dep, and an update to the download-edge page listing the latest changes included in the edge release. 'publish' sends this to the server, runs a script server-side to deploy the content, and updates a git tag on success. This is still an experimental feature. We ship lombok as an eclipse plugin. The plugin isn't much of a plugin; the install script of the plugin fulfills the same role as lombok's installer (which is: add a line configuring lombok as an agent during eclipse bootup), and the uninstall script removes it. > ant eclipsep2.build > ant eclipsep2.pack > ant eclipsep2.publish 'build' generates the various files required to appear as an eclipse plugin, and makes the jar(s). 'pack' makes a bzip ready to ship to a server. 'publish' ships it and runs a script server-side to put these files in the right place; requires SSH access to the server.