You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaCard Ant构建引入外部JAR报错:cap不支持classpath嵌套元素

问题:Ant构建JavaCard项目时引入外部JAR报错

错误信息

cap doesn't support the nested "classpath" element.

当前build.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<project name="TEST-Applet" default="build-cap" basedir=".">

    <get src="https://github.com/martinpaljak/ant-javacard/releases/download/v23.08.29/ant-javacard.jar" dest="."
         skipexisting="true"/>
    <taskdef name="javacard" classname="pro.javacard.ant.JavaCard" classpath="ant-javacard.jar"/>

    <property name="src.dir" value="src"/>
    <property name="build.dir" value="build"/>
    <property name="target.dir" value="target"/>
    <property name="test.dir" value="testing"/>
    <property name="jc.sdk.kit" value="../jc_sdks/jc310r20210706_kit"/>
    <property name="jc.sdk.target" value="3.0.5"/>
    <property name="test_info.jar" value="src/com/info/otherapplet/test_info.jar"/>

    <property name="pkg.ver" value="2.0"/>
    <property name="pkg.aid" value="XX:00:00:00:00"/>
    <property name="applet.version" value="2.0.0"/>
    <property name="applet.aid" value="XX:00:00:00:00"/>
    <property name="applet.artifact" value="test-applet.cap"/>
    <property name="applet.class" value="com.test.testapplet.TestApplet"/>

    <target name="clean" description="Clean up build artifacts (*.class, *.cap)">
        <delete failonerror="false">
            <fileset dir="${build.dir}" includes="**"/>
            <fileset dir="${target.dir}" includes="**/*.cap"/>
        </delete>
    </target>

    <target name="copy-src-to-build">
        <mkdir dir="${build.dir}"/>
        <delete includeEmptyDirs="true">
            <fileset dir="${build.dir}" includes="**"/>
        </delete>
        <copy todir="${build.dir}/src">
            <fileset dir="${src.dir}">
                <include name="**"/>
            </fileset>
        </copy>
    </target>

    <target name="inject-git-version" depends="copy-src-to-build">
        .
        .
    </target>

    <description>Builds the project.</description>
    <target name="build-cap" description="Generate applet artifact (CAP file)" depends="inject-git-version">
        <tstamp/>
        <mkdir dir="${target.dir}"/>
        <javacard jckit="${jc.sdk.kit}">
            <cap targetsdk="${jc.sdk.target}" aid="${pkg.aid}" version="${pkg.ver}"
                 sources="${build.dir}" output="${target.dir}/${applet.artifact}">
                <applet class="${applet.class}" aid="${applet.aid}"/>
                <classpath>
                    <pathelement path="${test_info.jar}"/> <!-- Include the JAR in the classpath -->
                </classpath>
            </cap>
        </javacard>
    </target>
</project>

项目目录结构

project_root    
│
└───src
│   │   com
│   |   │   info
|   |   |   |   otherapplet
│   |   │   |   |   test_info.jar
|   |   |   |   |   TestApplet.java
|   |   |   |   |   Version.java 
│   ant-javacard.jar
|   build.xml
|   README.md

解决方案

ant-javacard的<cap>元素不支持嵌套<classpath>,正确做法是将外部JAR配置到<javacard>任务层级的classpath中,有两种实现方式:

方式1:使用预定义路径引用

在项目根节点下添加路径定义:

<path id="external.libs">
    <pathelement location="${test_info.jar}"/>
</path>

然后修改<javacard>任务,通过classpathref引用该路径:

<javacard jckit="${jc.sdk.kit}" classpathref="external.libs">
    <cap targetsdk="${jc.sdk.target}" aid="${pkg.aid}" version="${pkg.ver}"
         sources="${build.dir}" output="${target.dir}/${applet.artifact}">
        <applet class="${applet.class}" aid="${applet.aid}"/>
    </cap>
</javacard>

方式2:直接在<javacard>下嵌套<classpath>

无需预定义路径,直接将<classpath>放到<javacard>内部:

<javacard jckit="${jc.sdk.kit}">
    <classpath>
        <pathelement path="${test_info.jar}"/>
    </classpath>
    <cap targetsdk="${jc.sdk.target}" aid="${pkg.aid}" version="${pkg.ver}"
         sources="${build.dir}" output="${target.dir}/${applet.artifact}">
        <applet class="${applet.class}" aid="${applet.aid}"/>
    </cap>
</javacard>

额外注意事项

  • 确认test_info.jar的路径配置正确,当前路径与目录结构匹配,无需调整;
  • 确保JAR内的JavaCard类符合目标SDK版本(3.0.5)的规范,避免兼容性问题。

内容的提问来源于stack exchange,提问作者Preeti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 14:40:55