Ссылка на внешнюю библиотеку в сборке Ant - PullRequest
1 голос
/ 07 марта 2009

У нас есть скрипт сборки Ant для проекта, который мы разрабатываем для КПК. В eclipse у нас есть множество библиотек, на которые есть ссылки, и я знаю, как заставить их работать, когда мы запускаем jar на КПК, потому что у нас есть файл .lnk, куда вы можете добавить внешние библиотеки, просто добавив следующее:

512#"\J9\PPRO11\bin\j9.exe" -jcl:ppro11 -cp "\dist\WiFiTest.jar;\placelab\lib\placelab.jar" j2medemo.wifi.WiFiTest

Добавление любых необходимых нам библиотек после аргумента -cp. Тем не менее, я понятия не имею, как воспроизвести это в файле ant (на самом деле, это не преувеличение, но после прочтения всей документации я все еще не понимаю).

У нас есть следующее.

<target name="jar" depends="prepare">
 <delete file="${dist}/${appname}.jar"/>
 <delete file="${dist}/MANIFEST.MF"/>
 <manifest file="${dist}/MANIFEST.MF">
    <attribute name="Built-By" value="${user.name}"/>
    <attribute name="Main-Class" value="j2medemo.GUI.MapPanel"/>
</manifest>
<jar destfile="${dist}/${appname}.jar"
     basedir="${classes}"
     includes="**/*.class, **/*.jpg, **/*.gif,**/*.png,**/*.xml"
     manifest="${dist}/MANIFEST.MF"
     />
</target>

Я пробовал добавлять везде, где только могу придумать, но это не помогает. Могу ли я просто добавить его к включаемой части?

Во-вторых, у нас есть цель запуска:

<target name="run" description="run" depends="jar">
    <exec dir="${j9bin}" executable="${j9bin}\j9.exe">
        <arg line="-jcl:ppro11 -cp '${dist}\${appname}.jar;placelab\lib\placelab.jar' ${mainclass}"/>
        <env key="JAVA_HOME" path="${j9home}"/>
    </exec>
</target>

И я хотел изменить его для запуска другого класса, поэтому я создал следующие две цели:

<target name="jarSAX" depends="prepare">
 <delete file="${dist}/SAXParse.jar"/>
 <delete file="${dist}/MANIFEST.MF"/>
 <manifest file="${dist}/MANIFEST.MF">
    <attribute name="Built-By" value="${user.name}"/>
    <attribute name="Main-Class" value="j2medemo.Routes.SAXParse"/>
</manifest>
<jar destfile="${dist}/SAXParse.jar"
     basedir="${classes}"
     includes="**/*.class, **/*.jpg, **/*.gif,**/*.png,**/*.xml"
     manifest="${dist}/MANIFEST.MF"
     />
</target>

И

<target name="runSAXParser" description="run" depends="jarSAX">
        <exec dir="${j9bin}" executable="${j9bin}\j9.exe">
            <arg line="-jcl:ppro11 -cp '${dist}\SAXParse.jar' j2medemo.Routes.SAXParse"/>
            <env key="JAVA_HOME" path="${j9home}"/>
        </exec>
    </target>

Но если я попытаюсь запустить это, я получу следующую ошибку:

Exception in thread "main" java.lang.NoClassDefFoundError: j2medemo.Routes.SAXParse

Если у кого-то есть идеи / решения по любому из вопросов, которые будут наиболее полезны.

1 Ответ

3 голосов
/ 07 марта 2009

Из того, что я могу сказать, вам нужно добавить элементы classpath в манифест. Должно выглядеть примерно так:

 <manifest file="${dist}/MANIFEST.MF">
    <attribute name="Built-By" value="${user.name}"/>
    <attribute name="Main-Class" value="j2medemo.Routes.SAXParse"/>
    <attribute name="Class-Path" value="WiFiTest.jar;placelab.jar"/>
 </manifest>

Записи classpath должны быть относительно местоположения Jar в распространяемом файле. Оттуда вы сможете выполнить jar напрямую (используя опцию командной строки -jar, я не уверен, что это за J9) Должен быть похож на аналогичный вызов Java:

java -jar MainJar.jar
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...