More serious work on the build system.

This commit is contained in:
Reinier Zwitserloot committed 2009-10-14 16:32:30 +02:00
1 parent 3a3ca496ef
commit 09dcd79529
8 files changed
+352 -88

No files matched your search

+1
View File
@@ -4,3 +4,4 @@ dist
google.properties
debug
LombokizedEclipse.launch
libertad-upload.key
+16 -3
View File
@@ -1,9 +1,22 @@
projectlombok makes java a spicier language by adding 'handlers' that know how to build and compile simple, boilerplate-free, not-quite-java code.
Using lombok is made as simple as possible, and aims to work on all major java IDEs as well as javac itself.
See LICENCE for the project lombok licence.
To start:
First, run:
ant installDeps
to grab a bunch of dependencies interactively from the internet.
Then, to build lombok:
ant dist
try ant -projecthelp for descriptions of other options.
Project Authors:
Reinier Zwitserloot
+7 -6
View File
@@ -69,32 +69,33 @@ the common tasks and can be called on to run the main aspects of all the sub-scr
<property name="lombok.dist.built" value="true" />
</target>
<target name="compile" description="Compiles the code">
<target name="compile" depends="version" description="Compiles the code">
<ant antfile="buildScripts/compile.ant.xml" target="compile" inheritAll="false">
<property name="lombok.version" value="${lombok.version}" />
</ant>
</target>
<target name="maven" description="Build a maven repository">
<target name="maven" depends="version" description="Build a maven repository">
<ant antfile="buildScripts/maven.ant.xml" target="maven" inheritAll="false">
<property name="lombok.version" value="${lombok.version}" />
</ant>
</target>
<target name="publish" description="Publishes the latest build to googlecode">
<target name="publish" depends="version" description="Publishes the latest build to googlecode">
<ant antfile="buildScripts/publish.ant.xml" target="publish" inheritAll="false">
<property name="lombok.version" value="${lombok.version}" />
</ant>
</target>
<target name="website" description="Prepares the website for distribution">
<target name="website" depends="version" description="Prepares the website for distribution">
<ant antfile="buildScripts/website.ant.xml" target="website" inheritAll="false">
<property name="lombok.version" value="${lombok.version}" />
</ant>
</target>
<target name="website-novideo" description="Prepares the website for distribution, but does not add the videos to the zip.">
<ant antfile="buildScripts/website.ant.xml" target="website-novideo" inheritAll="false">
<target name="website-publish" depends="version"
description="Prepares the website for distribution and then publishes it to projectlombok.org">
<ant antfile="buildScripts/website.ant.xml" target="website-publish" inheritAll="false">
<property name="lombok.version" value="${lombok.version}" />
</ant>
</target>
@@ -0,0 +1,31 @@
package lombok.website;
import com.petebevin.markdown.MarkdownProcessor;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class CompileChangelog {
public static void main(String[] args) {
try {
FileInputStream in = new FileInputStream(args[0]);
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] b = new byte[65536];
while (true) {
int r = in.read(b);
if ( r == -1 ) break;
out.write(b, 0, r);
}
in.close();
String markdown = new String(out.toByteArray(), "UTF-8");
String html = new MarkdownProcessor().markdown(markdown);
FileOutputStream file = new FileOutputStream(args[1]);
file.write(html.getBytes("UTF-8"));
file.close();
System.exit(0);
} catch (Throwable e) {
e.printStackTrace();
System.exit(1);
}
}
}
@@ -0,0 +1,190 @@
/*
* Modified from http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/UpToDate.java?view=markup
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package lombok.website;
import java.io.File;
import java.util.Vector;
import java.util.Enumeration;
import java.util.Iterator;
import java.net.MalformedURLException;
import java.net.URL;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.Task;
import org.apache.tools.ant.taskdefs.condition.Condition;
import org.apache.tools.ant.types.Resource;
import org.apache.tools.ant.types.FileSet;
import org.apache.tools.ant.types.resources.Union;
import org.apache.tools.ant.types.resources.FileResource;
import org.apache.tools.ant.types.resources.URLResource;
import org.apache.tools.ant.types.selectors.SelectorUtils;
public class WebUpToDate extends Task implements Condition {
private String property;
private String value;
private String urlbase;
private File sourceFile;
private Vector sourceFileSets = new Vector();
private Union sourceResources = new Union();
/**
* The property to set if the target file is more up-to-date than
* (each of) the source file(s).
*
* @param property the name of the property to set if Target is up-to-date.
*/
public void setProperty(String property) {
this.property = property;
}
/**
* The value to set the named property to if the target file is more
* up-to-date than (each of) the source file(s). Defaults to 'true'.
*
* @param value the value to set the property to if Target is up-to-date
*/
public void setValue(String value) {
this.value = value;
}
/**
* Returns the value, or "true" if a specific value wasn't provided.
*/
private String getValue() {
return (value != null) ? value : "true";
}
/**
* The file that must be older than the target file
* if the property is to be set.
*
* @param file the file we are checking against the target file.
*/
public void setSrcfile(File file) {
this.sourceFile = file;
}
/**
* Nested &lt;srcfiles&gt; element.
* @param fs the source files
*/
public void addSrcfiles(FileSet fs) {
sourceFileSets.addElement(fs);
}
/**
* Nested resource collections as sources.
* @return the source resources to configure.
* @since Ant 1.7
*/
public Union createSrcResources() {
return sourceResources;
}
public void setUrlbase(String base) {
if (base.charAt(base.length()-1) != '/') this.urlbase = base + "/";
else this.urlbase = base;
}
/**
* Evaluate (all) target and source file(s) to
* see if the target(s) is/are up-to-date.
* @return true if the target(s) is/are up-to-date
*/
public boolean eval() {
if (sourceFileSets.size() == 0 && sourceResources.size() == 0 && sourceFile == null) {
throw new BuildException("At least one srcfile or a nested <srcfiles> or <srcresources> element must be set.");
}
if ((sourceFileSets.size() > 0 || sourceResources.size() > 0) && sourceFile != null) {
throw new BuildException("Cannot specify both the srcfile attribute and a nested <srcfiles> or <srcresources> element.");
}
if (urlbase == null) {
throw new BuildException("The urlbase attribute must be set.");
}
// if the source file isn't there, throw an exception
if (sourceFile != null && !sourceFile.exists()) {
throw new BuildException(sourceFile.getAbsolutePath() + " not found.");
}
boolean upToDate = true;
if (sourceFile != null) {
Resource fileResource = new FileResource(sourceFile);
upToDate = isUpToDate(fileResource);
}
if (upToDate) {
Enumeration e = sourceFileSets.elements();
while (upToDate && e.hasMoreElements()) {
FileSet fs = (FileSet)e.nextElement();
Iterator it = fs.iterator();
while (upToDate && it.hasNext()) {
Resource r = (Resource)it.next();
upToDate = isUpToDate(r);
}
}
}
if (upToDate) {
Resource[] r = sourceResources.listResources();
for (int i = 0; upToDate && i < r.length; i++) {
upToDate = isUpToDate(r[i]);
}
}
return upToDate;
}
private boolean isUpToDate(Resource r) throws BuildException {
String url = urlbase + r.getName();
Resource urlResource;
try {
urlResource = new URLResource(new URL(url));
} catch (MalformedURLException e) {
throw new BuildException("url is malformed: " + url, e);
}
if (SelectorUtils.isOutOfDate(r, urlResource, 20)) {
log(r.getName() + " is newer than " + url, Project.MSG_VERBOSE);
return false;
} else {
return true;
}
}
/**
* Sets property to true if target file(s) have a more recent timestamp
* than (each of) the corresponding source file(s).
* @throws BuildException on error
*/
public void execute() throws BuildException {
if (property == null) {
throw new BuildException("property attribute is required.", getLocation());
}
boolean upToDate = eval();
if (upToDate) {
getProject().setNewProperty(property, getValue());
log("Website is up to date.");
}
}
}
+107 -79
View File
@@ -24,6 +24,25 @@
This buildfile is part of projectlombok.org. It is responsible for building the website and all website-related aspects,
such as converting the changelog into HTML, and creating javadoc.
</description>
<path id="deps.path">
<fileset dir="deps/lombok">
<include name="**/*.jar" />
</fileset>
</path>
<path id="libs.path">
<fileset dir="lib/lombok">
<include name="**/*.jar" />
</fileset>
</path>
<path id="webclasses.deps.path">
<fileset dir="deps/website">
<include name="**/*.jar" />
</fileset>
</path>
<property name="SNIPPET_TAB_STOP" value="2" />
<target name="-website-clean">
@@ -31,7 +50,6 @@ such as converting the changelog into HTML, and creating javadoc.
</target>
<target name="website" description="Prepares the website for distribution" depends="-website-main, -website-videos, -website-dist" />
<target name="website-novideo" description="Prepares the website for distribution, but does not add the videos to the zip." depends="-website-main, -website-dist" />
<target name="version" unless="lombok.version">
<ant antfile="build.xml" target="version" inheritAll="false" />
@@ -43,7 +61,32 @@ such as converting the changelog into HTML, and creating javadoc.
</loadresource>
</target>
<target name="-website-videos" depends="-website-clean">
<target name="-compile-webclasses">
<mkdir dir="build/webclasses" />
<javac destdir="build/webclasses" debug="on" source="1.4" target="1.4">
<classpath refid="webclasses.deps.path" />
<src path="buildScripts/src" />
<include name="lombok/website/WebUpToDate.java" />
</javac>
<javac destdir="build/webclasses" debug="on" source="1.5">
<classpath refid="webclasses.deps.path" />
<src path="buildScripts/src" />
<include name="lombok/website/CompileChangelog.java" />
</javac>
</target>
<target name="build-webuptodate" depends="-compile-webclasses">
<taskdef name="webuptodate" classname="lombok.website.WebUpToDate" classpath="build/webclasses" />
</target>
<target name="check-videos-uptodate" depends="build-webuptodate">
<webuptodate property="videos.uptodate" urlbase="http://projectlombok.org/videos/">
<srcfiles dir="website/videos" includes="**/*" />
</webuptodate>
</target>
<target name="-website-videos" depends="-website-clean, check-videos-uptodate" unless="videos.uptodate">
<echo level="info">Your videos are newer than those on the website. They will be included too.</echo>
<mkdir dir="build/website/videos" />
<copy todir="build/website/videos">
<fileset dir="website/videos" />
@@ -106,7 +149,23 @@ such as converting the changelog into HTML, and creating javadoc.
<tarfileset dir="build/website" />
<tarfileset dir="doc/api" prefix="api" />
</tar>
<echo>Now upload dist/website.tar.bz2 to the webserver.</echo>
</target>
<taskdef name="scp" classname="org.apache.tools.ant.taskdefs.optional.ssh.Scp" classpathref="webclasses.deps.path" />
<taskdef name="sshexec" classname="org.apache.tools.ant.taskdefs.optional.ssh.SSHExec" classpathref="webclasses.deps.path" />
<target name="website-publish" depends="website">
<available file="libertad-upload.key" property="libertad.key.available" />
<fail unless="libertad.key.available">You don't have the libertad-upload.key; you'll need it to get write access to the server.</fail>
<scp
localFile="dist/website.tar.bz2"
todir="lombokup@projectlombok.org:/staging"
keyfile="libertad-upload.key" passphrase=""
sftp="true" verbose="true" trust="true" />
<sshexec
host="projectlombok.org"
username="lombokup"
keyfile="libertad-upload.key" passphrase=""
trust="true" command="./deployWebsite" />
</target>
<target name="-integrateSnippet">
@@ -146,80 +205,49 @@ such as converting the changelog into HTML, and creating javadoc.
</copy>
</target>
<target name="changelogToHtml">
<mkdir dir="build/changelog" />
<echo file="build/changelog/CompileChangelog.java"><![CDATA[
import com.petebevin.markdown.MarkdownProcessor;
import java.io.*;
public class CompileChangelog {
public static void main(String[] args) {
try {
FileInputStream in = new FileInputStream(args[0]);
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] b = new byte[65536];
while ( true ) {
int r = in.read(b);
if ( r == -1 ) break;
out.write(b, 0, r);
}
in.close();
String markdown = new String(out.toByteArray(), "UTF-8");
String html = new MarkdownProcessor().markdown(markdown);
FileOutputStream file = new FileOutputStream(args[1]);
file.write(html.getBytes("UTF-8"));
file.close();
System.exit(0);
} catch ( Throwable e ) {
e.printStackTrace();
System.exit(1);
}
}
}
]]></echo>
<mkdir dir="build/website" />
<javac srcdir="build/changelog" destdir="build/changelog" classpath="deps/website/markdownj.jar" debug="on" />
<property name="CHANGELOG_FILE" location="doc/changelog.markdown" />
<property name="CHANGELOG_HTML" location="build/website/changelog.html" />
<java fork="true" classname="CompileChangelog" failonerror="true">
<classpath>
<pathelement location="deps/website/markdownj.jar" />
<pathelement location="build/changelog" />
</classpath>
<arg value="${CHANGELOG_FILE}" />
<arg value="${CHANGELOG_HTML}" />
</java>
</target>
<target name="javadoc" description="Generates the javadoc" depends="version">
<delete dir="build/api" quiet="true" />
<delete dir="doc/api" quiet="true" />
<mkdir dir="build/api" />
<property name="javadoc.overview.html" location="build/javadoc.overview.html" />
<echo file="${javadoc.overview.html}"><![CDATA[<html><body>
Welcome to the lombok javadoc.&nbsp;If you're just looking to learn more about using lombok
You probably want to look at <a href="http://projectlombok.org/features/index.html">the feature documentation</a>.&nbsp;Otherwise,
check the <a href="lombok/package-summary.html">lombok</a> package.&nbsp;If you're trying to extend lombok or
write your own plugins, the other packages are what you're looking for.</body></html>
]]></echo>
<javadoc sourcepath="src" defaultexcludes="yes" destdir="build/api" windowtitle="Lombok" Overview="${javadoc.overview.html}">
<classpath refid="lombok.deps.path" />
<classpath refid="lombok.libs.path" />
<link href="http://java.sun.com/javase/6/docs/api/" offline="true" packagelistLoc="./deps/javadoc/java6"/>
<header><![CDATA[<a href='http://projectlombok.org/'>Lombok</a> - ]]>v${lombok.version}</header>
<bottom><![CDATA[<i>Copyright &#169; 2009 Reinier Zwitserloot and Roel Spilker, licensed under the <a href='http://www.opensource.org/licenses/mit-license.php'>MIT licence</a>.]]></bottom>
</javadoc>
<mkdir dir="doc/api" />
<copy todir="doc/api">
<fileset dir="build/api" includes="**/*.html" />
<filterchain>
<linecontainsregexp negate="true">
<regexp pattern="(Generated by javadoc)|(.META NAME=.date.)" />
</linecontainsregexp>
</filterchain>
</copy>
<copy todir="doc/api">
<fileset dir="build/api" excludes="**/*.html" />
</copy>
</target>
<target name="changelogToHtml" depends="-compile-webclasses">
<mkdir dir="build/website" />
<property name="CHANGELOG_FILE" location="doc/changelog.markdown" />
<property name="CHANGELOG_HTML" location="build/website/changelog.html" />
<java fork="true" classname="lombok.website.CompileChangelog" failonerror="true">
<classpath>
<path refid="webclasses.deps.path" />
<pathelement location="build/webclasses" />
</classpath>
<arg value="${CHANGELOG_FILE}" />
<arg value="${CHANGELOG_HTML}" />
</java>
</target>
<target name="javadoc" description="Generates the javadoc" depends="version">
<delete dir="build/api" quiet="true" />
<delete dir="doc/api" quiet="true" />
<mkdir dir="build/api" />
<property name="javadoc.overview.html" location="build/javadoc.overview.html" />
<echo file="${javadoc.overview.html}"><![CDATA[<html><body>
Welcome to the lombok javadoc.&nbsp;If you're just looking to learn more about using lombok
You probably want to look at <a href="http://projectlombok.org/features/index.html">the feature documentation</a>.&nbsp;Otherwise,
check the <a href="lombok/package-summary.html">lombok</a> package.&nbsp;If you're trying to extend lombok or
write your own plugins, the other packages are what you're looking for.</body></html>
]]></echo>
<javadoc sourcepath="src" defaultexcludes="yes" destdir="build/api" windowtitle="Lombok" Overview="${javadoc.overview.html}">
<classpath refid="deps.path" />
<classpath refid="libs.path" />
<link href="http://java.sun.com/javase/6/docs/api/" offline="true" packagelistLoc="./deps/javadoc/java6"/>
<header><![CDATA[<a href='http://projectlombok.org/'>Lombok</a> - ]]>v${lombok.version}</header>
<bottom><![CDATA[<i>Copyright &#169; 2009 Reinier Zwitserloot and Roel Spilker, licensed under the <a href='http://www.opensource.org/licenses/mit-license.php'>MIT licence</a>.]]></bottom>
</javadoc>
<mkdir dir="doc/api" />
<copy todir="doc/api">
<fileset dir="build/api" includes="**/*.html" />
<filterchain>
<linecontainsregexp negate="true">
<regexp pattern="(Generated by javadoc)|(.META NAME=.date.)" />
</linecontainsregexp>
</filterchain>
</copy>
<copy todir="doc/api">
<fileset dir="build/api" excludes="**/*.html" />
</copy>
</target>
</project>
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.