2 <!--++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
3 Filename: $RCSfile: build.xml,v $
4 Purpose: Ant build file for Jabref.
6 Ant-Download: http://jakarta.apache.org/ant
7 Ant-Manual: http://jakarta.apache.org/ant/manual/index.html
9 Jabref-Homepage: http://jabref.sourceforge.net
10 Jabref@SourceForge: http://sourceforge.net/projects/jabref
11 Jabref@FreshMeat: http://freshmeat.net
12 Jabref-CVSRoot: :pserver:anonymous@cvs.jabref.sourceforge.net:/cvsroot/jabref
15 help mailing list: must be inserted
17 Precondition: 1. Ant should be installed.
18 2. JAVA_HOME environment variable contains the path to JDK1.4 or higher
19 3. ANT_HOME environment variable contains the path to ant's home directory
23 Authors: Joerg K. Wegner, wegnerj@informatik.uni-tuebingen.de
25 Version: $Revision: 1.62 $
26 $Date: 2006/07/25 19:56:36 $
27 $Author: mortenalver $
31 - insert dynamic build info generation (resource/build.properties)
32 - copy fonts directory, used by the new about dialog
33 - change static "version" into mainfest file into ${jabref.version}
35 - bugfix, first it should be made a rebuild of the build directory
36 and then a jar should be generated from this directory
37 - take all files for the jar archive !!! FROM BUILD directory !!!
39 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-->
41 <project name="JabRef" default="jars" basedir=".">
43 <!-- ==========================================================================================
45 ========================================================================================== -->
47 <!-- some version information -->
48 <property name="jabref.bin" value="jabref" />
49 <property name="jabref.version" value="2.1" />
50 <property name="jabref.placeholder.version" value="@version@" /> <!-- used by replace task -->
53 <!-- Set the properties for intermediate directory -->
54 <property name="build.dir" value="build" />
55 <property name="build.classes" value="${build.dir}/classes" />
56 <property name="build.tmp" value="${build.dir}/tmp" />
57 <property name="build.osx" value="${build.dir}/classes/osxadapter" />
58 <property name="build.lib" value="${build.dir}/lib" />
59 <property name="build.bin" value="${build.dir}/bin" />
60 <property name="build.win" value="${build.dir}/windows" />
61 <property name="build.images" value="${build.dir}/images" />
62 <property name="build.fonts" value="${build.dir}/images/font" />
63 <property name="build.resource" value="${build.dir}/resource" />
64 <property name="build.help" value="${build.dir}/help" />
65 <property name="build.javadocs" value="${build.dir}/docs/API" />
66 <property name="build.extensions" value="${build.dir}/extensions" />
67 <property name="build.extension-javadocs" value="${build.extensions}/API" />
68 <property name="build.extension-layout" value="${build.extensions}/layout" />
69 <property name="build.openoffice.meta" value="${build.resource}/openoffice"/>
71 <!-- Set the properties for source directories -->
72 <property name="src.dir" value="src" />
73 <property name="src.tests" value="src/java/tests" />
74 <property name="txt.dir" value="src/txt" />
75 <property name="java.dir" value="${src.dir}/java" />
76 <property name="osx.dir" value="${src.dir}/osx" />
77 <property name="win.dir" value="${src.dir}/windows" />
78 <property name="resource.dir" value="${src.dir}/resource" />
79 <property name="bin.dir" value="${src.dir}/scripts" />
80 <property name="images.dir" value="${src.dir}/images" />
81 <property name="fonts.dir" value="${src.dir}/images/font" />
82 <property name="help.dir" value="${src.dir}/help" />
83 <property name="extensions.dir" value="${src.dir}/extensions" />
84 <property name="layout.dir" value="${src.dir}/resource/layout" />
87 <!-- Set the properties for library directories -->
88 <property name="library.directory" value="lib" />
91 <taskdef name="jarbundler"
92 classpath="${library.directory}/jarbundler-1.4.jar"
93 classname="com.loomcom.ant.tasks.jarbundler.JarBundler" />
96 <!-- Build classpath -->
98 <pathelement path="${build.classes}" />
99 <!--<pathelement location="${library.directory}/commons-httpclient-2.0.jar" />
100 <pathelement location="${library.directory}/commons-logging.jar" />-->
101 <fileset dir="${library.directory}">
102 <include name="*.jar" />
106 <!-- Runs project (e.g. in NetBeans 4) -->
107 <target name="run" depends="jars">
108 <java classname="net.sf.jabref.JabRef" fork="true">
110 <pathelement location="${build.lib}/jabref.jar"/>
111 <!--<pathelement location="${library.directory}/commons-httpclient-2.0.jar" />
112 <pathelement location="${library.directory}/commons-logging.jar" />-->
113 <pathelement location="${library.directory}/antlr.jar" />
114 <pathelement location="${library.directory}/looks-2.0.4.jar" />
115 <pathelement location="${library.directory}/forms-1.0.4.jar" />
116 <pathelement location="${library.directory}/spin-1.4.jar" />
117 <pathelement location="${library.directory}/glazedlists-1.5.0_java14.jar" />
118 <pathelement location="${library.directory}/microba.jar" />
123 <!-- Target used for profiling with the Netbeans profiler. -->
124 <!--<target name="profile" depends="jars">
125 <nbprofile classname="net.sf.jabref.JabRef">
127 <pathelement location="${build.lib}/jabref.jar"/>
128 <pathelement location="${library.directory}/antlr.jar" />
129 <pathelement location="${library.directory}/looks-2.0.4.jar" />
130 <pathelement location="${library.directory}/forms-1.0.4.jar" />
131 <pathelement location="${library.directory}/spin.jar" />
132 <pathelement location="${library.directory}/glazedlists-1.5.0_java14.jar" />
136 <target name="profile" depends="jars" description="Profile JabRef">
137 <fail unless="netbeans.home">This target can only run inside the NetBeans IDE.</fail>
141 <pathelement location="${build.lib}/jabref.jar"/>
142 <pathelement location="${library.directory}/antlr.jar" />
143 <pathelement location="${library.directory}/looks-2.0.4.jar" />
144 <pathelement location="${library.directory}/forms-1.0.4.jar" />
145 <pathelement location="${library.directory}/spin-1.4.jar" />
146 <pathelement location="${library.directory}/glazedlists-1.5.0_java14.jar" />
150 <property environment="env"/>
151 <java fork="true" classname="net.sf.jabref.JabRef" dir="${build.dir}"
152 jvm="${profiler.info.jvm}">
153 <jvmarg value="${profiler.info.jvmargs.agent}"/>
154 <jvmarg line="${profiler.info.jvmargs}"/>
155 <env key="LD_LIBRARY_PATH" path="${profiler.info.agentpath}:${env.LD_LIBRARY_PATH}"/>
157 <pathelement location="${build.lib}/jabref.jar"/>
158 <pathelement location="${library.directory}/antlr.jar" />
159 <pathelement location="${library.directory}/looks-2.0.4.jar" />
160 <pathelement location="${library.directory}/forms-1.0.4.jar" />
161 <pathelement location="${library.directory}/spin-1.4.jar" />
162 <pathelement location="${library.directory}/glazedlists-1.5.0_java14.jar" />
167 <!-- Compiles project -->
168 <target name="compile">
169 <mkdir dir="${build.classes}" />
170 <!--deprecation="on"-->
171 <javac debug="off" deprecation="on" destdir="${build.classes}" source="1.4" target="1.4">
172 <src path="${java.dir}"/>
173 <exclude name="tests/**"/>
175 <pathelement path="${build.classes}" />
176 <!--<pathelement location="${library.directory}/commons-httpclient-2.0.jar" />
177 <pathelement location="${library.directory}/commons-logging.jar" />-->
178 <pathelement location="${library.directory}/antlr.jar" />
179 <pathelement location="${library.directory}/looks-2.0.4.jar" />
180 <pathelement location="${library.directory}/forms-1.0.4.jar" />
181 <pathelement location="${library.directory}/spin-1.4.jar" />
182 <pathelement location="${library.directory}/glazedlists-1.5.0_java14.jar" />
183 <pathelement location="${library.directory}/microba.jar" />
188 <!-- Compiles only the tests -->
189 <target name="compiletest">
190 <mkdir dir="${build.classes}" />
191 <!--deprecation="on"-->
192 <javac srcdir="${java.dir}/tests" debug="off" destdir="${build.classes}" source="1.4" target="1.4">
194 <pathelement path="${build.classes}" />
195 <!--<pathelement location="${library.directory}/commons-httpclient-2.0.jar" />
196 <pathelement location="${library.directory}/commons-logging.jar" />-->
197 <pathelement location="${library.directory}/antlr.jar" />
198 <pathelement location="${library.directory}/looks-2.0.4.jar" />
199 <pathelement location="${library.directory}/spin-1.4.jar" />
204 <!-- Builds the OSXAdapter -->
206 <mkdir dir="${build.classes}" />
208 <javac srcdir="${osx.dir}" debug="off" destdir="${build.classes}" target="1.4">
212 <!-- Copies in the OSXAdapter class, which is compilable only on Mac -->
213 <target name="non_osx">
214 <mkdir dir="${build.osx}" />
215 <copy file="${library.directory}/OSXAdapter.class" todir="${build.osx}" />
219 <!-- Jars up project -->
220 <target name="jars" depends="build">
221 <mkdir dir="${build.lib}" />
222 <mkdir dir="${build.tmp}" />
223 <jar destfile="${build.lib}/jabref.jar">
224 <fileset dir="${build.classes}" />
225 <fileset dir="${build.tmp}" />
226 <fileset dir="${build.dir}">
227 <include name="images/**" />
228 <include name="help/**" />
229 <include name="help/de/**" />
230 <include name="help/no/**" />
231 <include name="resource/**" />
233 <fileset dir="${library.directory}">
234 <include name="EndNote.zip" />
237 <fileset dir="${txt.dir}">
238 <include name="gpl.txt" />
239 <include name="lesser.txt" />
240 <include name="apache-license.txt" />
241 <include name="jgoodies.txt" />
242 <include name="README" />
245 <attribute name="Main-Class" value="net.sf.jabref.JabRef" />
246 <!-- <attribute name="Main-Class" value="net.sf.jabref.gui.FieldWeightDialog" /> -->
252 <!-- copy all necessary files and insert version informations -->
253 <target name="build" depends="compile, buildinfos" description="Build project">
254 <mkdir dir="${build.bin}" />
256 <mkdir dir="${build.resource}" />
257 <copy todir="${build.resource}">
258 <fileset dir="${resource.dir}">
259 <include name="**" />
262 <mkdir dir="${build.images}" />
263 <copy todir="${build.images}">
264 <fileset dir="${images.dir}">
265 <include name="**" />
269 <!-- the fonts are used by the new about dialog -->
270 <mkdir dir="${build.fonts}" />
271 <copy todir="${build.fonts}">
272 <fileset dir="${fonts.dir}">
277 <mkdir dir="${build.help}" />
278 <copy todir="${build.help}">
279 <fileset dir="${help.dir}">
280 <!--<include name="*" />-->
284 <!-- Insert version informations -->
285 <replace dir="${build.help}"
286 token="${jabref.placeholder.version}"
287 value="${jabref.version}">
288 <include name="**/About.html"/>
290 <replace dir="${build.openoffice.meta}"
291 token="${jabref.placeholder.version}"
292 value="${jabref.version}">
293 <include name="meta.xml"/>
297 <mkdir dir="${build.win}" />
298 <copy file="${build.lib}/${jabref.bin}.jar" todir="${build.win}" />
299 <copy todir="${build.win}">
300 <fileset dir="${win.dir}">
307 <!-- generate and save some build infos !!! necessary for dynamic build infos !!! -->
308 <!-- todo : replace it by the replace task :-),
309 src/resource/build.properties = template
310 build/resource/build.properties = real info file
312 <target name="buildinfos">
313 <tstamp/> <!-- get date -->
314 <buildnumber/> <!-- generate new build number -> build.number -->
315 <echo message="build number = ${build.number}"/>
316 <!-- write the file, please do not edit this lines -->
317 <echo file="${resource.dir}/build.properties">builddate=${TODAY}
318 build=${build.number}
319 version=${jabref.version}</echo>
323 <!-- Creates all docs -->
324 <target name="docs" depends="javadocs" description="Generates all the documentation" />
326 <!-- Creates javadocs -->
327 <target name="javadocs" depends="compile" description="Generates the javadocs">
328 <mkdir dir="${build.javadocs}" />
329 <javadoc sourcepath="${java.dir}" destdir="${build.javadocs}" author="true" version="true" windowtitle="JabRef API" link="http://java.sun.com/j2se/1.4.1/docs/api/">
331 <fileset dir="${java.dir}" defaultexcludes="yes">
332 <include name="**/*.java" />
335 <classpath refid="classpath" />
339 <!-- Creates javadocs for the extensions -->
340 <target name="extension-javadocs" depends="build" description="Generates the javadocs for the extensions archive">
341 <mkdir dir="${build.extension-javadocs}" />
342 <copy todir="${build.extension-javadocs}">
343 <fileset dir="${help.dir}" defaultexcludes="yes">
344 <include name="CustomExports.html" />
345 <include name="CustomImports.html" />
349 <javadoc sourcepath="${java.dir}"
350 destdir="${build.extension-javadocs}"
353 windowtitle="JabRef-Extensions API"
354 link="http://java.sun.com/j2se/1.4.1/docs/api/"
355 Overview="${extensions.dir}/API/overview.html"
359 create javadoc only selectively for classes that
360 users extending JabRef are likely to use
362 <fileset dir="${java.dir}" defaultexcludes="yes">
363 <include name="net/sf/jabref/imports/ImportFormat.java" />
364 <include name="net/sf/jabref/imports/ImportFormatReader.java" />
365 <include name="net/sf/jabref/BibtexEntry.java" />
366 <include name="net/sf/jabref/BibtexEntryType.java" />
367 <include name="net/sf/jabref/AuthorList.java" />
368 <include name="net/sf/jabref/AuthorList.java" />
369 <include name="net/sf/jabref/export/layout/LayoutFormatter.java" />
372 <classpath refid="classpath" />
376 <!-- Creates javadocs for the extensions -->
377 <target name="extensions" depends="extension-javadocs" description="Generates the extensions archive">
378 <!-- copy examples -->
379 <copy todir="${build.extensions}">
380 <fileset dir="${java.dir}">
381 <include name="net/sf/jabref/export/layout/format/CurrentDate.java"/>
382 <include name="net/sf/jabref/export/layout/format/ToLowerCase.java"/>
383 <include name="net/sf/jabref/export/layout/format/HTMLChars.java"/>
384 <include name="net/sf/jabref/imports/*Importer.java"/>
387 <mkdir dir="${build.extension-layout}" />
388 <copy todir="${build.extension-layout}">
389 <fileset dir="${layout.dir}" />
391 <copy todir="${build.extensions}">
392 <fileset dir="${extensions.dir}" />
394 <filter token="version" value="${jabref.version}"/>
397 <!-- create extensions-zip file -->
398 <zip destfile="${build.dir}/jabref-extensions.zip">
399 <zipfileset dir="${build.extensions}" prefix="jabref-extensions"/>
403 <target name="clean" description="Clean project">
404 <delete dir="${build.dir}" />
407 <!-- Unpacks jar needed jar files from lib directory into temp directory. -->
408 <target name="unjarlib" description="Unpacks jars from library">
409 <mkdir dir="${build.tmp}"/>
410 <!--<unjar src="${library.directory}/commons-httpclient-2.0.jar" dest="${build.tmp}" />
411 <unjar src="${library.directory}/commons-logging.jar" dest="${build.tmp}" />-->
412 <unjar src="${library.directory}/antlr.jar" dest="${build.tmp}" />
413 <!-- <unjar src="${library.directory}/plastic-1.2.1.jar" dest="${build.classes}" />-->
414 <unjar src="${library.directory}/looks-2.0.4.jar" dest="${build.tmp}" />
415 <unjar src="${library.directory}/forms-1.0.4.jar" dest="${build.tmp}" />
416 <unjar src="${library.directory}/spin-1.4.jar" dest="${build.tmp}" />
417 <unjar src="${library.directory}/glazedlists-1.5.0_java14.jar" dest="${build.tmp}" />
418 <unjar src="${library.directory}/microba.jar" dest="${build.tmp}" />
419 <delete dir="${build.tmp}/META-INF"/>
420 <!-- rename the microba license file -->
421 <move file="${build.tmp}/license.txt" tofile="${build.tmp}/microba-license.txt"/>
425 <target name="osxjar">
426 <jarbundler dir="${build.lib}"
428 mainclass="net.sf.jabref.JabRef"
429 jars="${build.lib}/${jabref.bin}.jar"
430 icon="${images.dir}/JabRef-Logo.icns"
431 version="${jabref.version}"
433 stubfile="${library.directory}/JavaApplicationStub" />
438 <!--++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
439 What's about the software design ?!;-)
440 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-->
442 <target name="pmd" description="SOFTWAREDESIGN: Project Mess Detector !;-)">
443 <echo>Checking Project Mess Detection (PMD) rulesets.</echo>
444 <taskdef name="pmd" classname="net.sourceforge.pmd.ant.PMDTask">
446 <pathelement path="${classpath}" />
447 <fileset dir="${library.directory}">
448 <include name="*.jar" />
452 <!-- allowed Pretty Much Done rulsets -->
453 <!-- rulesets/basic.xml -->
454 <!-- rulesets/braces.xml -->
455 <!-- rulesets/codesize.xml-->
456 <!-- rulesets/controversial.xml-->
457 <!-- rulesets/coupling.xml-->
458 <!-- rulesets/design.xml -->
459 <!-- rulesets/experimental.xml -->
460 <!-- rulesets/favorites.xml -->
461 <!-- rulesets/imports.xml -->
462 <!-- rulesets/naming.xml -->
463 <!-- rulesets/javabean.xml -->
464 <!-- rulesets/junit.xml -->
465 <!-- rulesets/scratchpad.xml -->
466 <!-- rulesets/strictexception.xml -->
467 <!-- rulesets/strings.xml -->
468 <!-- rulesets/unusedcode.xml -->
470 <pmd rulesetfiles="rulesets/unusedcode.xml,rulesets/basic.xml" failonerror="no">
471 <formatter type="html" toFile="${build.dir}/pmd_report.html" />
472 <fileset dir="${src.dir}">
473 <include name="**/*.java" />
477 <!-- check for duplicated code -->
478 <echo>WARNING: use environment variable: ANT_OPTS=-Xmx512m or this task will fail.</echo>
479 <echo>Checking for duplicated code using the Copy/Paste Detector (CPD).</echo>
480 <taskdef name="cpd" classname="net.sourceforge.pmd.cpd.CPDTask">
482 <pathelement path="${classpath}" />
483 <fileset dir="${library.directory}">
484 <include name="*.jar" />
488 <cpd format="text" minimumTokenCount="100" outputFile="${build.dir}/duplicated_code_report.txt">
489 <fileset dir="${src.dir}">
490 <include name="**/*.java" />
496 <target name="javancss" description="SOFTWAREDESIGN: Determining the NCSS and CCN code metrics for JOELib.">
497 <taskdef name="javancss" classname="javancss.JavancssAntTask">
499 <pathelement path="${classpath}" />
500 <fileset dir="${library.directory}">
501 <include name="*.jar" />
506 Complexity Ease of Risk
507 Number (CCN) maintenance
509 ---------------------------------------------
510 1-10, simple easy minimum
511 11-20, complex moderate moderate
512 21-50, more complex hard high
513 >50, unstable very hard very high
516 <javancss srcdir="${src.dir}" includes="**/*.java" excludes="jama/**/*.java, jmat/**/*.java, cformat/**/*.java" abortOnFail="false" ccnPerFuncMax="30" generateReport="true" outputfile="${build.dir}/javancss_report.plain" format="plain" packageMetrics="true" classMetrics="false" functionMetrics="false" />
519 <target name="jalopy" description="SOFTWAREDESIGN: source code formatter using the JOELib convention.">
520 <taskdef name="jalopy" classname="de.hunsicker.jalopy.plugin.ant.AntPlugin">
522 <pathelement path="${classpath}" />
523 <fileset dir="${library.directory}">
524 <include name="*.jar" />
528 <jalopy fileformat="unix" convention="${src.dir}/java/jalopy.format.convention.xml" history="file" historymethod="adler32" loglevel="error" threads="2" classpathref="classpath" backup="bak">
529 <fileset dir="${src.dir}">
530 <include name="java/net/sf/jabref/**/*.java" />
536 <junit printsummary="yes" fork="yes" haltonfailure="no">
537 <batchtest fork="yes" todir="/tmp/testres">
538 <fileset dir="${build.classes}">
539 <include name="**/*Tester.class" />
540 <include name="**/*Test.class" />
545 <pathelement location="${build.lib}/jabref.jar" />
546 <!--<pathelement location="${library.directory}/commons-httpclient-2.0.jar" />
547 <pathelement location="${library.directory}/commons-logging.jar" />-->
548 <pathelement location="${library.directory}/antlr.jar" />
549 <pathelement location="${library.directory}/looks-2.0.4.jar" />
550 <pathelement location="${library.directory}/looks-2.0.4.jar" />
551 <pathelement location="${library.directory}/spin-1.4.jar" />
554 <!--<test name="tests.net.sf.jabref.export.layout.format.AuthorLastFirstAbbreviatorTester"/>-->