{"id":13428426,"url":"https://github.com/martinpaljak/ant-javacard","last_synced_at":"2026-02-22T23:18:52.130Z","repository":{"id":25424484,"uuid":"28853876","full_name":"martinpaljak/ant-javacard","owner":"martinpaljak","description":"Easy to use Ant task for building JavaCard applets (2.1.1 to 3.2.0) 🐜","archived":false,"fork":false,"pushed_at":"2026-01-12T10:16:51.000Z","size":441,"stargazers_count":249,"open_issues_count":4,"forks_count":60,"subscribers_count":21,"default_branch":"next","last_synced_at":"2026-01-14T01:23:28.843Z","etag":null,"topics":["ant","ant-task","build-tool","java","javacard","javacard-applet"],"latest_commit_sha":null,"homepage":"https://javacard.pro","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/martinpaljak.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":["martinpaljak"],"patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":["https://martinpaljak.net/btc","https://www.paypal.me/martinpaljak"]}},"created_at":"2015-01-06T08:25:32.000Z","updated_at":"2026-01-10T13:18:08.000Z","dependencies_parsed_at":"2024-01-14T10:17:43.513Z","dependency_job_id":"6b9ac9de-15ce-4d82-bef8-9d6523b5c24f","html_url":"https://github.com/martinpaljak/ant-javacard","commit_stats":{"total_commits":349,"total_committers":10,"mean_commits":34.9,"dds":"0.26074498567335247","last_synced_commit":"24a878bec9b615abd4de5995ab92084d3f8b7899"},"previous_names":["martinpaljak/ant-jcpro"],"tags_count":52,"template":false,"template_full_name":null,"purl":"pkg:github/martinpaljak/ant-javacard","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/martinpaljak%2Fant-javacard","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/martinpaljak%2Fant-javacard/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/martinpaljak%2Fant-javacard/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/martinpaljak%2Fant-javacard/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/martinpaljak","download_url":"https://codeload.github.com/martinpaljak/ant-javacard/tar.gz/refs/heads/next","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/martinpaljak%2Fant-javacard/sbom","scorecard":{"id":93785,"data":{"date":"2025-08-04","repo":{"name":"github.com/martinpaljak/ant-javacard","commit":"7d55dccc999388b657c02d275084d3f096aac4af"},"scorecard":{"version":"v5.2.1-28-gc1d103a9","commit":"c1d103a9bb9f635ec7260bf9aa0699466fa4be0e"},"score":5.3,"checks":[{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#binary-artifacts"}},{"name":"Maintained","score":10,"reason":"18 commit(s) and 2 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#maintained"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: topLevel 'contents' permission set to 'write': .github/workflows/robot.yml:13","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#token-permissions"}},{"name":"Code-Review","score":0,"reason":"Found 0/30 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#dangerous-workflow"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/robot.yml:26: update your workflow using https://app.stepsecurity.io/secureworkflow/martinpaljak/ant-javacard/robot.yml/next?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/robot.yml:32: update your workflow using https://app.stepsecurity.io/secureworkflow/martinpaljak/ant-javacard/robot.yml/next?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/robot.yml:39: update your workflow using https://app.stepsecurity.io/secureworkflow/martinpaljak/ant-javacard/robot.yml/next?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/robot.yml:57: update your workflow using https://app.stepsecurity.io/secureworkflow/martinpaljak/ant-javacard/robot.yml/next?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/robot.yml:64: update your workflow using https://app.stepsecurity.io/secureworkflow/martinpaljak/ant-javacard/robot.yml/next?enable=pin","Info:   0 out of   3 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   2 third-party GitHubAction dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#cii-best-practices"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#license"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact v24.11.19 not signed: https://api.github.com/repos/martinpaljak/ant-javacard/releases/186125757","Warn: release artifact v24.10.15 not signed: https://api.github.com/repos/martinpaljak/ant-javacard/releases/179962604","Warn: release artifact v24.07.30 not signed: https://api.github.com/repos/martinpaljak/ant-javacard/releases/167804879","Warn: release artifact v24.04.08 not signed: https://api.github.com/repos/martinpaljak/ant-javacard/releases/150205615","Warn: release artifact v24.03.15 not signed: https://api.github.com/repos/martinpaljak/ant-javacard/releases/146733451","Warn: release artifact v24.11.19 does not have provenance: https://api.github.com/repos/martinpaljak/ant-javacard/releases/186125757","Warn: release artifact v24.10.15 does not have provenance: https://api.github.com/repos/martinpaljak/ant-javacard/releases/179962604","Warn: release artifact v24.07.30 does not have provenance: https://api.github.com/repos/martinpaljak/ant-javacard/releases/167804879","Warn: release artifact v24.04.08 does not have provenance: https://api.github.com/repos/martinpaljak/ant-javacard/releases/150205615","Warn: release artifact v24.03.15 does not have provenance: https://api.github.com/repos/martinpaljak/ant-javacard/releases/146733451"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#signed-releases"}},{"name":"Security-Policy","score":10,"reason":"security policy file detected","details":["Info: security policy file detected: github.com/martinpaljak/.github/SECURITY.md:1","Info: Found linked content: github.com/martinpaljak/.github/SECURITY.md:1","Info: Found disclosure, vulnerability, and/or timelines in security policy: github.com/martinpaljak/.github/SECURITY.md:1","Info: Found text in security policy: github.com/martinpaljak/.github/SECURITY.md:1"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#security-policy"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during GetBranch(master): error during branchesHandler.query: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#branch-protection"}},{"name":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/robot.yml:18"],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#packaging"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#vulnerabilities"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 1 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-15T08:26:12.104Z","repository_id":25424484,"created_at":"2025-08-15T08:26:12.104Z","updated_at":"2025-08-15T08:26:12.104Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29730524,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-22T20:09:16.275Z","status":"ssl_error","status_checked_at":"2026-02-22T20:09:13.750Z","response_time":110,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ant","ant-task","build-tool","java","javacard","javacard-applet"],"created_at":"2024-07-31T01:00:56.880Z","updated_at":"2026-02-22T23:18:52.121Z","avatar_url":"https://github.com/martinpaljak.png","language":"Java","funding_links":["https://github.com/sponsors/martinpaljak","https://martinpaljak.net/btc","https://www.paypal.me/martinpaljak"],"categories":["Java","Tools","JavaCard"],"sub_categories":["文件同步"],"readme":"# Building JavaCard applet CAP files with Ant\n\n\u003e Easy to use [Apache Ant](https://ant.apache.org/) task for building JavaCard CAP files in a declarative way.\n\nHave a consistent and concise build declaration for JavaCard applets, no matter which JavaCard SDK version you use or target.\n\n[![Latest release](https://img.shields.io/github/release/martinpaljak/ant-javacard.svg)](https://github.com/martinpaljak/ant-javacard/releases/latest)\n\u0026nbsp;[![Latest version](https://img.shields.io/maven-metadata/v?label=latest\u0026metadataUrl=https%3A%2F%2Fmvn.javacard.pro%2Fmaven%2FSNAPSHOTS%2Fcom%2Fgithub%2Fmartinpaljak%2Fant-javacard%2Fmaven-metadata.xml)](https://gist.github.com/martinpaljak/c77d11d671260e24eef6c39123345cae)\n\u0026nbsp;[![MIT licensed](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/martinpaljak/ant-javacard/blob/master/LICENSE)\n\u0026nbsp;[![Build status](https://github.com/martinpaljak/ant-javacard/actions/workflows/robot.yml/badge.svg?branch=master)](https://github.com/martinpaljak/ant-javacard/actions)\n\u0026nbsp;[![Made in Estonia](https://img.shields.io/badge/Made_in-Estonia-0072CE)](https://estonia.ee)\n\n## Features\n * **[Do What I Mean](http://en.wikipedia.org/wiki/DWIM)**. You will [love it](#happy-users)!\n * **No dependencies**, no extra or unrelated downloads. Just **a ~50KB reproducible jar file**.\n * Supports **all available JavaCard SDK versions**: 2.1.2, 2.2.1, 2.2.2, 3.0.3, 3.0.4, 3.0.5, 3.1.0 and 3.2.0\n   * Get one from [oracle.com](https://www.oracle.com/java/technologies/javacard-sdk-downloads.html) or use the [handy Github repository](https://github.com/martinpaljak/oracle_javacard_sdks)\n * **Works on all platforms** with LTS Java 1.8+: Windows, OSX, Linux.\n   * **[Usable SDK-s depend on JDK version](https://github.com/martinpaljak/ant-javacard/wiki/JavaCard-SDK-and-JDK-version-compatibility)**\n * Almost **everything integrates** or works with Ant.\n   * Trigger it [from Maven](https://github.com/martinpaljak/ant-javacard/wiki/How-to-use-from-Maven) or via [Gradle wrapper](https://github.com/bertrandmartel/javacard-gradle-plugin)\n * Can be easily integrated into **continuous integration** workflows.\n * Generates CAP files from **sources** or **pre-compiled** class files.\n * Import **external libraries**: natural use of `.jar` libraries and/or `.exp` files.\n * **No restrictions** on project folder layout (but `src/main/javacard` works).\n\n\u003e [!TIP]\n\u003e Loading JavaCard applets is equally pleasing with **[GlobalPlatformPro](https://github.com/martinpaljak/GlobalPlatformPro)**\n\n## Download \u0026 Use\n * Download [`ant-javacard.jar`](https://github.com/martinpaljak/ant-javacard/releases/latest/download/ant-javacard.jar)\n * Or use the download task:\n```xml\n\u003cget src=\"https://github.com/martinpaljak/ant-javacard/releases/latest/download/ant-javacard.jar\" dest=\".\" skipexisting=\"true\"/\u003e\n```\n * Then load the task with the following in your `build.xml` file:\n```xml\n\u003ctaskdef name=\"javacard\" classname=\"pro.javacard.ant.JavaCard\" classpath=\"ant-javacard.jar\"/\u003e\n```\n * Now you can create applets within your Ant targets like this:\n```xml\n\u003cjavacard\u003e\n  \u003ccap jckit=\"/path/to/jckit_dir\" aid=\"0102030405\"\u003e\n    \u003capplet class=\"myapplet.MyApplet\" aid=\"0102030405060708\"/\u003e\n  \u003c/cap\u003e\n\u003c/javacard\u003e\n```\n(which results in output similar to this)\n```\ntarget:\n      [cap] INFO: using JavaCard 3.0.5 SDK in sdks/jc305u4_kit\n      [cap] INFO: targeting JavaCard 2.2.2 SDK in sdks/jc222_kit\n      [cap] Setting package name to testapplets.empty\n      [cap] INFO: generated applet AID: A000000617008E5CDAAE01 for testapplets.empty.Empty\n      [cap] Building CAP with 1 applet from package testapplets.empty (AID: A000000617008E5CDAAE)\n      [cap] testapplets.empty.Empty A000000617008E5CDAAE01\n  [compile] Compiling files from /Users/martin/projects/ant-javacard/src/testapplets/empty\n  [compile] Compiling 1 source file to /var/folders/gf/_m9mq9td3lz32qv1hd4r12yw0000gn/T/jccpro841338375581620546\n      [cap] CAP saved to /Users/martin/projects/ant-javacard/Empty_A000000617008E5CDAAE_50da91a4_2.2.2.cap\n```\n## Recommended setup\nBased on the [JavaCard SDK and JDK version compatibility matrix](https://github.com/martinpaljak/ant-javacard/wiki/JavaCard-SDK-and-JDK-version-compatibility).\n- Targeting JC 3.0.4 or later (modern JavaCard-s)\n  - Use JDK 17 (don't forget to set `$JAVA_HOME`)\n  - Use JavaCard SDK 3.2.0 (`jckit=\"sdks/jc320v24.0_kit\"`) with right target (`targetsdk=\"3.x.y\"`)\n  - NOTE: depending on your external components, absence of v2.3 export files will force you to stick with JavaCard SDK 3.1\n- Targeting JC 2.2.x or 3.0.1 (older JavaCard-s)\n  - Use JDK 11 (don't forget to set `$JAVA_HOME`)\n  - Use JavaCard SDK 3.0.5u4 (`jckit=\"sdks/jc305u4_kit\"`) with right target (`targetsdk=\"sdks/jc222_kit\"`)\n\n\u003e [!NOTE]\n\u003e ant-javacard will continue to support using legacy JavaCard 2.X SDK-s (and thus JDK-8) for as long as this is achievable with sane effort\n\n## Syntax\nSample:\n\n```xml\n\u003cjavacard jckit=\"/path/to/jckit_dir1\"\u003e\n  \u003ccap targetsdk=\"/path/to/jckit_dir2\" aid=\"0102030405\" package=\"package.name\" version=\"0.1\" output=\"MyApplet.cap\" sources=\"src/myapplet\" classes=\"path/to/classes\" export=\"mylib\"\u003e\n    \u003capplet class=\"myapplet.MyApplet\" aid=\"0102030405060708\"/\u003e\n    \u003cimport exps=\"path/to/exps\" jar=\"/path/to/lib.jar\"/\u003e\n  \u003c/cap\u003e\n\u003c/javacard\u003e\n```\nDetails:\n * `javacard` tag - generic task\n   * `jckit` attribute - path to the JavaCard SDK that is used if individual `cap` does not specify one. Optional if `cap` defines one, required otherwise.\n * `cap` tag - construct a CAP file\n   * `jckit` attribute - path to the JavaCard SDK to be used. Optional if `javacard` defines one, required otherwise.\n   * `targetsdk` attribute - path to the target JavaCard SDK (or `\"3.0.X\"` target version when using JavaCard SDK v3.1), to be used for this CAP. Optional, value of `jckit` used by default. Allows to use a more recent converter to target older JavaCard platforms.\n   * `sources` attribute - path(s) to Java source code, to be compiled against the JavaCard SDK. Either `sources` or `classes` is required, unless `src/main/javacard` or `src/main/java` exists.\n   * `sources2` attribute - additional sources to build per-platform applets. Optional, deprecated (use multiple paths for `sources`)\n   * `classes` attribute - path to pre-compiled class files to be assembled into a CAP file. If both `classes` and `sources` are specified, compiled class files will be put to `classes` folder, which is created if missing.\n   * `includes` attribute - comma or space separated list of patterns of files that must be included (like `**/SomeFile.java`).\n   * `excludes` attribute - comma or space separated list of patterns of files that must be excluded.\n   * `package` attribute - 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\n   * `version` attribute - version of the package. Optional - defaults to 0.0 if left unspecified.\n   * `aid` attribute - AID (hex) of the package. Recommended - or set to the 5 first bytes of the applet AID if left unspecified.\n   * `output` attribute - path where to save the generated CAP file. Optional, see below for variables.\n   * `export` attribute - path (folder) where to place the JAR and generated EXP file. Optional.\n   * `exportmap` attribute - if set to true, use pre-defined export file. Optional.\n   * `jar` attribute - path where to save the generated archive JAR file. Optional.\n   * `jca` attribute - path where to save the generated JavaCard Assembly (JCA) file. Optional.\n   * `verify` attribute - if set to false, disables verification of the resulting CAP file with offcardeverifier. Optional.\n   * `debug` attribute - if set to true, generates debug CAP components. Optional.\n   * `strip` attribute - if set to true, removes class files from target CAP. Optional.\n   * `ints` attribute - if set to true, enables support for 32 bit `int` type. Optional.\n * `applet` tag - for creating an applet inside the CAP\n   * `class` attribute - class of the Applet where install() method is defined. Required.\n   * `aid` attribute - AID (hex) of the applet. Recommended - or set to package `aid`+`i` where `i` is index of the applet definition in the build.xml instruction\n * `import` tag - for linking against external components/libraries, like `GPSystem` or `OPSystem`\n   * `exps` attribute - path to the folder keeping `.exp` files. Optional. Required if file in `jar` does not include .exp files.\n   * `jar` attribute - path to the JAR file for compilation. Required if using `sources` mode and not necessary with `classes` mode if java code is already compiled\n\nNotes:\n * `jc.home` property has the highest precedence, followed by `jckit` path of `cap`, followed by path in `javacard`, followed by `JC_HOME` environment variable. SDK must be valid to be considered for use.\n * All source files are expected to be UTF-8. It is a sane choice, please use it.\n\n### Output file name variables\n\nThe default file name template is `%n_%a_%h_%j_%J.cap` which results in a file name similar to `SomeApplet_010203040506_9a037e30_2.2.2_jdk11.cap`.\n\nFollowing substitutions are available:\n * `%h` - 8 character prefix (hex) of the SHA-256 Load File Data Block hash of the CAP file\n * `%H` - SHA-256 Load File Data Block hash (hex) of the CAP file\n * `%n` - _common name_ of the entity, either applet class (if only one applet) or package name\n * `%p` - package name\n * `%a` - package AID (hex)\n * `%j` - targeted JavaCard version (ex: 3.0.5)\n * `%J` - used JDK version (ex: jdk11)\n * `%v` - applet package version (same as `version` attribute for `cap`, ex: v1.0)\n\n### Command line utility\n`ant-javacard.jar` can be used to dump built .cap file metadata and to re-run off-card verifier.\n\n- dump .cap file metadata\n  - `java -jar ant-javacard.jar \u003ccapfile\u003e`\n- run off-card verifier\n  - `java -jar ant-javacard.jar \u003csdk\u003e [\u003ctargetsdk\u003e] \u003ccapfile\u003e \u003cexpfiles\u003e`\n\n### Environment variables\n- `JAVA_HOME` - path to the JDK to be used.\n- `JC_HOME` - path to the JavaCard SDK to be used if not specified in the build file.\n- `ANT_JAVACARD_TMP` - path to the temporary folder to be used for building CAP files. This is not cleaned after use.\n- `ANT_JAVACARD_DEBUG` - if set, shows debug output.\n\n## Maven dependency\nReleases are published to [`https://mvn.javacard.pro/maven/`](https://mvn.javacard.pro/maven/). To use it, add this to your `pom.xml`:\n\n```xml\n\u003crepositories\u003e\n    \u003crepository\u003e\n        \u003cid\u003ejavacard-pro\u003c/id\u003e\n        \u003curl\u003ehttps://mvn.javacard.pro/maven/\u003c/url\u003e\n    \u003c/repository\u003e\n\u003c/repositories\u003e\n```\n\nPushes to Maven Central happen manually and only for selected final versions.\n\n## License\n * [MIT](./LICENSE)\n\n## Happy users\nA random list of users, with a public link:\n* Applets:\n  * [IsoApplet](https://github.com/philipWendland/IsoApplet) by [@philipWendland](https://github.com/philipWendland)\n  * [NdefApplet](https://github.com/promovicz/javacard-ndef) by [@promovicz](https://github.com/promovicz)\n  * [GidsApplet](https://github.com/vletoux/GidsApplet) by [@vletoux](https://github.com/vletoux)\n  * [LedgerWalletApplet](https://github.com/LedgerHQ/ledger-javacard) by [@LedgerHQ](https://github.com/LedgerHQ)\n  * [KeePassNFC](https://github.com/nfd/smartcard_crypto_applet) by [@nfd](https://github.com/nfd)\n  * [PivApplet](https://github.com/arekinath/PivApplet) (PIV) by [@arekinath](https://github.com/arekinath)\n  * [OpenFIPS201](https://github.com/makinako/OpenFIPS201) (PIV) by [@makinako](https://github.com/makinako)\n  * [Cryptonit](https://github.com/mbrossard/cryptonit-applet) (PIV) by [@mbrossard](https://github.com/mbrossard)\n  * [HTOP NDEF](https://github.com/petrs/hotp_via_ndef) by [@petrs](https://github.com/petrs)\n  * [Yubikey OTP](https://github.com/arekinath/YkOtpApplet) by [@arekinath](https://github.com/arekinath)\n  * [SmartPGP](https://github.com/ANSSI-FR/SmartPGP) by [@ANSSI-FR](https://github.com/ANSSI-FR)\n  * [SatochipApplet](https://github.com/Toporin/SatochipApplet) (Bitcoin Hardware Wallet) by [@Toporin](https://github.com/Toporin)\n  * [SIMple-ID](https://github.com/alan-turing-institute/SIMple-ID) by [@alan-turing-institute](https://github.com/alan-turing-institute)\n  * [HelloSTK2](https://github.com/mrlnc/HelloSTK2) (SIM toolkit sample app) by [@mrlnc](https://github.com/mrlnc)\n  * [NeoPGP](https://github.com/mwalle/NeoPGP) by [@mwalle](https://github.com/mwalle)\n  * [EUCLEAK](https://ninjalab.io/eucleak/) by [NinjaLab](https://ninjalab.io)\n  * Plus loads of academic projects, classes and papers.\n* Integration projects:\n  * [JavaCard Gradle plugin](https://github.com/bertrandmartel/javacard-gradle-plugin) by [@bertrandmartel](https://github.com/bertrandmartel)\n  * [JavaCard Template project with Gradle](https://github.com/ph4r05/javacard-gradle-template) by [@ph4r05](https://github.com/ph4r05)\n  * [ant-javacard in Docker](https://github.com/xoryouyou/docker-javacard) by [@xoryouyou](https://github.com/xoryouyou)\n* Other:\n  * **You!** Don't torture yourself with complexity, **KISS!**\n\n## Contact\n * See [javacard.pro](https://javacard.pro)\n * [GlobalPlatform/JavaCard discussions](https://github.com/martinpaljak/GlobalPlatformPro/discussions)\n\n## Similar projects\n * standard JavaCard SDK Ant tasks\n   * :( as cumbersome to use as the command line utilities\n   * :( not declarative/DWIM enough\n   * :) very explicit interface with all details exposed\n * JavaCard Gradle plugin (MIT) - https://github.com/bertrandmartel/javacard-gradle-plugin\n   * :) Wraps ant-javacard for use with Gradle\n * gradle-javacard (Apache 2.0) - https://github.com/fidesmo/gradle-javacard\n   * :) nice declarative interface\n   * :( requires gradle (40M download)\n   * :( JavaCard 2.2.2 only\n * EclipseJCDE (Eclipse 1.0) - http://eclipse-jcde.sourceforge.net/\n   * :( JavaCard 2.2.2 only\n   * :( not possible to integrate in CI - depends on eclipse\n   * :( essentially an Eclipse GUI wrapper for JC SDK\n * JCOP Tools\n   * :( not open source\n * NetBeans IDE JC support\n   * :( not possible to integrate into CI\n   * :( JavaCard 3.0 only\n   * :( Netbeans, not cross platform\n * Maven2 task from FedICT (LGPL3) - https://code.google.com/p/eid-quick-key-toolset\n   * :( Maven downloads half the internet before even simple tasks\n   * :( JavaCard 2.2.2 only\n * Ant script files with templates\n   * :( XML is a *very* bad and verbose programming environment\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmartinpaljak%2Fant-javacard","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmartinpaljak%2Fant-javacard","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmartinpaljak%2Fant-javacard/lists"}