Не удалось сделать ant script с swtjar

Я пытаюсь создать кросс-платформу .jar программы, которая использует SWT для своего графического интерфейса. Я наткнулся на этот и этот, и попытался использовать его в своих собственных программа. Я не очень разбираюсь в сценариях ant, и эта программа имеет много других .jars в пути сборки, поэтому я использовал eclipse для создания ant build script, который я модифицировал, чтобы включить задачу swtjar. Однако, когда script запускается и переходит к задаче swtjar, он терпит неудачу и говорит, что The archive swtjar.jar doesn't exist. Я также попытался сделать законный файл сборки ранее, а также получил эту ошибку. Есть что-то, что мне не хватает? Я включил swtjar.jar в путь сборки и taskdef в верхней части script.

Здесь script:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project default="create_run_jar" name="Create Runnable Jar for Project kEllyIRClient">
<!--this file was created by Eclipse Runnable JAR Export Wizard-->
<!--ANT 1.7 is required-->

<taskdef name="swtjar" classname="org.swtjar.ant.SWTJarTask"
                       classpath="./libs/swtjar.jar"/>

<target name="create_run_jar">

    <!--make the release directory if it doesn't exist-->
    <mkdir dir="./release/"/>

    <!--Create a temporary jar file with all the dependencies (i.e. the libs folder)-->
    <jar jarfile="./release/externalLibsTemp.jar">
      <zipgroupfileset dir="./libs/">
        <exclude name="swt/*swt*.jar"/>
        <exclude name="swtjar.jar"/>
        <include name="**/*.jar"/>
      </zipgroupfileset>
    </jar>

    <!--package with swt-->
    <swtjar jarfile="./release/KEllyIRC.jar" targetmainclass="shared.Initializer" swtversion="3.7.1">
        <fileset dir="./bin"/>
        <!--Add the dependencies jar to the jar, but exclude the meta-inf/manifest stuff
        cause that screws stuff up.-->
        <zipfileset excludes="META-INF/*.SF" src="./release/externalLibsTemp.jar" />
        <fileset dir="./libs/swt/" includes="swt-win32-3.7.1.jar"/>
    </swtjar>

    <!--Delete temporary file-->
    <delete file="./release/externalLibsTemp.jar"/>

</target>

И это ошибка:

D:\My Dropbox\Java\kEllyIRClient\swtjar-buildV2.xml:24: The archive swtjar.jar doesn't exist

Ответ 1

Я оставил комментарий с просьбой о выходе из этой цели ant.

В то же время вы включаете свои багеты с ошибками неправильно и с неправильными именами. Вы используете:

<zipfileset excludes="META-INF/*.SF" src="./libs/swtjar.jar"/>
<zipfileset excludes="META-INF/*.SF" src="./libs/org.eclipse.swt.win32.win32.x86_3.7.1.v3738a.jar"/>
  • Вам не нужно включать swtjar - цель сделает это автоматически для вас. Тем не менее, я подозреваю, что это тот шаг, который не работает для вас.
  • Вам также нужно называть свои swt-банки в формате "swt- <platform> <bitness> -. jar". Поэтому в вашем случае вам нужно переименовать "org.eclipse.swt.win32.win32.x86_3.7.1.v3738a.jar" в "swt-win32-3.7.1.jar".
  • Вы не должны включать swt-банки с помощью zipfileset

Ваша переименованная SWT-банка должна быть включена следующим образом.

<!-- SWT Jars -->
<fileset dir="./libs" includes="swt-win32-3.7.1.jar" />

Большинство из них уже описано на сайте swtjar: http://mchr3k.github.com/swtjar/

Ответ 2

Я знаю, что это действительно старый вопрос, но я нашел решение, которое сработало для меня, но это, вероятно, не поможет всем. Видите ли, SWTJar ненавидит пробелы.

Я имею в виду, что в вашем пути к каталогу не могут быть пробелы. В противном случае SWTJar анализирует путь неправильно, как показано ниже (мой старый jar script вывод):

[swtjar] /Users/generaluse/Documents/javagame/eclipse/FlippyChat 20MSG/swt/swtjar.jar
BUILD FAILED
/Users/generaluse/Documents/javagame/eclipse/FlippyChat MSG/build.xml:42: The archive swtjar.jar doesn't exist

Обратите внимание на эту часть после [swtjar] (которая генерируется swtjar):

/FlippyChat 20MSG/

по сравнению с BUILD FAILED, сгенерированным с помощью ant:

/FlippyChat MSG/

Так как SWTJar добавляет 20, он выглядит не в том месте и не может найти свою банку.

mchr, если вы читаете это, можете ли вы его исправить?

Тем временем я рекомендую использовать дефис (-) или подчеркивание (_) вместо пробела. В любом случае, это стандарт программирования.