Building JavaCard applet CAP files with Ant
Easy to use Ant task for building JavaCard CAP files in a declarative way.
- Do What I Mean. You will love it!
- No dependencies, no extra or unrelated downloads. Just a 14KB jar.
- Supports all available JavaCard SDK versions: 2.1.2, 2.2.1, 2.2.2, 3.0.3, 3.0.4 and 3.0.5
- Works on all platforms with Java 1.8: Windows, OSX, Linux.
- Almost everything integrates or works with Ant.
- Can be easily integrated into continuous integration workflows.
- Generates CAP files from sources or pre-compiled class files.
- Import external libraries: natural use of
- No restrictions on project folder layout.
- Loading JavaCard applets is equally pleasing with GlobalPlatformPro
Download & Use
ant-javacard.jar(be sure to get the latest version)
- The only supported Java version for all SDK targets is 1.8!
- Or use the download task:
<get src="https://github.com/martinpaljak/ant-javacard/releases/download/18.07.12/ant-javacard.jar" dest="." skipexisting="true"/>
- Then add the following to your
<taskdef name="javacard" classname="pro.javacard.ant.JavaCard" classpath="ant-javacard.jar"/>
- Now you can create applets within your Ant targets like this:
<javacard> <cap jckit="/path/to/jckit_dir" aid="0102030405" output="MyApplet.cap" sources="src/myapplet"> <applet class="myapplet.MyApplet" aid="0102030405060708"/> </cap> </javacard>
(which results in output similar to this)
target: [cap] INFO: using JavaCard v2.2.2 SDK in ../jc222_kit [cap] Setting package name to testapplets [cap] Building CAP with 1 applet from package testapplets [cap] testapplets.Empty 0102030405060708 [compile] Compiling 1 source file to /var/folders/l7/h99c5w6j0y1b8_qbsth_9v4r0000gn/T/antjc4506897175807383834 [cap] CAP saved to /Users/martin/projects/ant-javacard/Empty222.cap
<javacard jckit="/path/to/jckit_dir1"> <cap jckit="/path/to/jckit_dir2" aid="0102030405" package="package.name" version="0.1" output="MyApplet.cap" sources="src/myapplet" classes="path/to/classes" export="mylib"> <applet class="myapplet.MyApplet" aid="0102030405060708"/> <import exps="path/to/exps" jar="/path/to/lib.jar"/> </cap> </javacard>
javacardtag - generic task
jckitattribute - path to the JavaCard SDK that is used if individual
capdoes not specify one. Optional if
capdefines one, required otherwise.
captag - construct a CAP file
jckitattribute - path to the JavaCard SDK to be used. Optional if
javacarddefines one, required otherwise.
targetsdkattribute - path to the target JavaCard SDK to be used for this CAP. Optional, value of
jckitused by default. Allows to use a more recent converter to target older JavaCard platforms.
sourcesattribute - path to Java source code, to be compiled against the current JavaCard SDK. Either
sources2attribute - additional sources to build per-platform applets. Optional.
classesattribute - path to pre-compiled class files to be assembled into a CAP file. If both
sourcesare specified, compiled class files will be put to
classesfolder, which is created if missing.
packageattribute - name of the package of the CAP file. Optional for applets - set to the parent package of the applet class if left unspecified, required for libraries
versionattribute - version of the package. Optional - defaults to 0.1 if left unspecified.
fidesmoappidattribute - Fidesmo appId, to create the package AID and applet AID-s automatically. Optional.
aidattribute - AID (hex) of the package. Recommended - or set to the 5 first bytes of the applet AID if left unspecified.
outputattribute - path where to save the generated CAP file. Recommended - or set to applet class/package name + ".cap"
exportattribtue - path (folder) where to place the JAR and generated EXP file. Optional.
jarattribute - path where to save the generated archive JAR file. Optional.
jcaattribute - path where to save the generated JavaCard Assembly (JCA) file. Optional.
verifyattribute - if set to false, disables verification of the resulting CAP file with offcardeverifier. Optional.
debugattribute - if set to true, generates debug CAP components. Optional.
intsattribute - if set to true, enables support for 32 bit
javaversionattribute - override the Java source and target version. Optional.
applettag - for creating an applet inside the CAP
classattribute - class of the Applet where install() method is defined. Required.
aidattribute - AID (hex) of the applet. Recommended - or set to package
iis index of the applet definition in the build.xml instruction
importtag - for linking against external components/libraries, like
expsattribute - path to the folder keeping
.expfiles. Optional. Required if
jardoes not include .exp files.
jarattribute - path to the JAR file for compilation. Required if using
sourcesmode and not necessary with
classesmode if java code is already compiled
jc.homeproperty has the highest precedence, followed by
cap, followed by path in
javacard, followed by
JC_HOMEenvironment variable. SDK must be valid to be considered for use.
A random list of users, with a public link:
- IsoApplet by @philipWendland
- NdefApplet by @promovicz
- GidsApplet by @vletoux
- LedgerWalletApplet by @LedgerHQ
- KeePassNFC by @nfd
- PivApplet (PIV) by @arekinath
- OpenFIP201 (PIV) by @makinako
- Cryptonit (PIV) by @mbrossard
- HTOP NDEF by @petrs
- Yubikey OTP by @arekinath
- SmartPGP by @ANSSI-FR
- Plus loads of academic projects, classes and papers.
- Integration projects:
- You! Don't torture yourself with complexity, KISS!
- See javacard.pro
- standard JavaCard SDK Ant tasks
- :( as cumbersome to use as the command line utilities
- :( not declarative/DWIM enough
- :) very explicit interface with all details exposed
- JavaCard Gradle plugin (MIT) - https://github.com/bertrandmartel/javacard-gradle-plugin
- :) Wraps ant-javacard for use with Gradle
- gradle-javacard (Apache 2.0) - https://github.com/fidesmo/gradle-javacard
- :) nice declarative interface
- :( requires gradle (40M download)
- :( JavaCard 2.2.2 only
- EclipseJCDE (Eclipse 1.0) - http://eclipse-jcde.sourceforge.net/
- :( JavaCard 2.2.2 only
- :( not possible to integrate in CI - depends on eclipse
- :( essentially an Eclipse GUI wrapper for JC SDK
- JCOP Tools
- :( not open source
- NetBeans IDE JC support
- :( not possible to integrate into CI
- :( JavaCard 3.0 only
- :( Netbeans, not cross platform
- Maven2 task from FedICT (LGPL3) - https://code.google.com/p/eid-quick-key-toolset
- :( Maven downloads half the internet before even simple tasks
- :( JavaCard 2.2.2 only
- Ant script files with templates
- :( XML is a very bad and verbose programming environment