4

I have some legacy Java 6 project and I want to bring some updates on them like Java 8 time library. I found that is possible by using ThreeTen backport. But I don't know how to use it with Ant build tool. Any good references or examples please ?

David Conrad
  • 15,432
  • 2
  • 42
  • 54
hoss
  • 113
  • 5
  • For some context this is a follow-up question to [SOAP Web Service parsing Date from String returning d-1 value](https://stackoverflow.com/questions/48660918/soap-web-service-parsing-date-from-string-returning-d-1-value). hoss and I have searched the web without finding a guide or example. I can’t believe this hasn’t been done several times before. – Ole V.V. Feb 08 '18 at 10:00
  • 2
    Can you not just fish the jar out of Maven central http://repo1.maven.org/maven2/org/threeten/threetenbp/1.3.6/ and add it to your build file? – martin clayton Feb 08 '18 at 11:19

1 Answers1

2

Overview:

  1. Download the ThreeTen Backport JAR file into the lib folder of your Ant project
  2. Make sure that JAR files in your lib folder are on the classpath for both compilation and running (this may already be the case).
  3. In your Java source files add imports from org.threeten.bp with subpackages and use the imported classes in your code.

Download JAR

On http://www.threeten.org/threetenbp/, at the top select Releases -> Download to get to the Maven repository. In the first search result (currently threetenbp 1.3.6 from 10-Jul-2017), in the Download column click jar. Download the file (in this case threetenbp-1.3.6.jar) to or move it to the lib folder of your Ant project. Or where you’ve got your external JARs. If you haven’t got such a place, create a folder called lib for it.

Fix your classpath

If you haven’t previously got any external dependencies in the form of external JAR files that your program uses, you may need to prepare your build.xml file for these. In my build.xml I added

<property name="lib.dir"     value="lib"/>

<path id="classpath">
    <fileset dir="${lib.dir}" includes="**/*.jar"/>
</path>

This defines names for the lib folder and the classpath for use later. Note that I specify that all .jar files in the lib folder with subfolders are on the classpath, so in the future you can just drop JARs in to add them to your project. Then I added the classpath both to my compile target and to my run target:

<target name="compile">
    <mkdir dir="${classes.dir}"/>
    <javac srcdir="${src.dir}" destdir="${classes.dir}" classpathref="classpath"/>
</target>

And

<target name="run" depends="jar">
    <java fork="true" classname="${main-class}">
        <classpath>
            <path refid="classpath"/>
            <path location="${jar.dir}/${ant.project.name}.jar"/>
        </classpath>
    </java>
</target>

We need to fix both targets because the external JAR(s) is/are needed both for compilation and for running.

Use java.time classes in your Java program

Here’s my program. Note that the import statements refer to org.threeten.bp.

package ovv.ant.threetenbp;

import java.util.Date;

import org.threeten.bp.Instant;
import org.threeten.bp.DateTimeUtils;

public class AntAndThreeTenBackportDemo {

    public static void main(String... commandLineArguments) {
        Instant once = Instant.parse("1939-11-19T16:30:00Z");
        Date oldfashionedDateObject = DateTimeUtils.toDate(once);
        System.out.println("As Date: " + oldfashionedDateObject);
    }

}

When I run from Ant (on my computer in Europe/Copenhagen time zone) I get:

run:
     [java] As Date: Sun Nov 19 17:30:00 CET 1939

I used Ant 1.9.7, but I think it’s the same in other versions.

Source and further reading

I used the Ant tutorial here, in particular the Using External Libraries section.

Ole V.V.
  • 81,772
  • 15
  • 137
  • 161