Хобрук: Ваш путь к мастерству в программировании

Программное выполнение сценария Ant с задачами Ant

У меня есть сценарий Ant, который использует задачу Ant (я использую эту задачу для выполнения преобразований QVTo).

Сценарий Ant следующий:

<?xml version="1.0" encoding="UTF-8"?>
<project name="project" default="default" xmlns:qvto="http://www.eclipse.org/qvt/1.0.0/Operational">
    <target name="default">

    <taskdef name="http://www.eclipse.org/qvt/1.0.0/Operational:transformation" classname="org.eclipse.m2m.internal.qvt.oml.runtime.ant.QvtoAntTransformationTask">
        <classpath>
           <pathelement location="${basedir}/libAnt/antTasks.jar"/>
        </classpath>
    </taskdef>

    <qvto:transformation uri="platform:/resource/QVToTransformation/transforms/QVTTransformation.qvto">

            <in uri="platform:/resource/QVToTransformation/In/In.ecp" />  
            <out uri="platform:/resource/QVToTransformation/Out/Out.uml" />

            <trace uri="platform:/resource/QVToTransformation/Trace/trace.qvtotrace"
                generate="true" incrementalUpdate="false"  />

        </qvto:transformation>

    </target>
</project>

Код, который я использую в Java для выполнения Ant Script, следующий:

File AntFile = new File(this.getClass().getResource("qvto/AntQVTo.xml").getFile());
Project p = new Project();
p.setUserProperty(
    "ant.file", 
    this.getClass().getResource("qvto/AntQVTo.xml").getFile()
    );

p.init();

ProjectHelper helper = ProjectHelper.getProjectHelper();
p.addReference("ant.projectHelper", helper);
helper.parse(p, AntFile);
p.executeTarget(p.getDefaultTarget());

Проблема, когда я запускаю свой код Java, заключается в том, что кажется, что Ant Task вообще не распознается, когда я запускаю, возвращается следующая ошибка:

Exception in thread "AWT-EventQueue-0" C:\path\to\AntTask\AntQVTo.xml:5: Problem: failed to create task or type http://www.eclipse.org/qvt/1.0.0/Operational:transformation
Cause: The name is undefined.
Action: Check the spelling.
Action: Check that any custom tasks/types have been declared.
Action: Check that any <presetdef>/<macrodef> declarations have taken place.
No types or tasks have been defined in this namespace yet

У меня нет проблем, если я выполняю свой сценарий Ant непосредственно в Eclipse, поскольку эта задача по умолчанию определена в настройках Eclipse в Ant-> Runtime-> Tasks.

Проблема может заключаться в том, что скрипт Ant, выполняемый в коде Java, не запускается как «Выполнять в той же JRE, что и проект».

У меня есть эта задача Ant, определенная в plugin.xml, которая запускает приложение Eclipse в пути к классам, а также как расширение:

<extension point="org.eclipse.ant.core.antTasks">
    <antTask
        class="org.eclipse.m2m.internal.qvt.oml.runtime.ant.QvtoAntTransformationTask"
        eclipseRuntime="true"
        headless="true"
        library="libAnt/antTasks.jar"
        name="transformation"
        uri="http://www.eclipse.org/qvt/1.0.0/Operational"
        />
</extension>

Кто-нибудь знает, как я могу решить мою проблему?

Заранее спасибо и привет.

13.07.2017

  • Вы определяете новую задачу где-нибудь в своем скрипте Ant с помощью задачи taskdef? См. ant.apache.org/manual/Tasks/taskdef.html и ant.apache.org/manual/Tasks/typedef.html 13.07.2017
  • Я уже добавил тег taskdef, но он возвращает следующее предупреждающее сообщение taskdef class org.eclipse.m2m.internal.qvt.oml.runtime.ant.QvtoAntTransformationTask cannot be found using the classloader AntClassLoader[], и выполнение также завершается с ошибкой с тем же сообщением, я думаю, что правильно указываю путь, но я не уверен 13.07.2017
  • Глядя на taskdef, который вы только что добавили. Во-первых, имя или ваша задача не должны быть URL-адресом. Я не могу сказать, что еще может быть не так, не имея доступа к самому файлу jar. Опять же, я бы порекомендовал посмотреть документацию Ant по typedef. 13.07.2017

Ответы:


1

отсутствует библиотека Apache IVY. Загрузите эту библиотеку отсюда — apache и скопируйте банку в свой ant lib и добавьте в путь к классу.

  • Загрузите банку и установите Ant (например, C:\Apps\Tools\apache-ant-1.9).

  • Загрузите банку и извлеките Ivy (например, C:\Users\UserName\Downloads\apache-ivy-2.4)

  • Скопируйте C:\Users\UserName\Downloads\apache-ivy-2.4\ivy-2.4.jar в C:\Apps\Tools\apache-ant-1.9\lib.

13.07.2017
  • Это не сработало, я скачал .jar для IVY (ivy-2.4.0.jar), добавил в библиотеку в своем проекте eclipse и добавил в путь к классам, но это не сработало. Это действительно необходимо для установки Apache Ant? Разве он не установлен по умолчанию в Eclipse IDE? 13.07.2017

  • 2

    Можешь попробовать изменить

    От:

    <taskdef name="http://www.eclipse.org/qvt/1.0.0/Operational:transformation" classname="org.eclipse.m2m.internal.qvt.oml.runtime.ant.QvtoAntTransformationTask">
    

    To:

    <taskdef name="transformation" classname="org.eclipse.m2m.internal.qvt.oml.runtime.ant.QvtoAntTransformationTask">
    

    И удалите префикс пространства имен для transformation задачи/элемента.

    14.07.2017
  • Привет, спасибо за ваш ответ, я попытался изменить атрибут имени на transformation, но ничего не изменилось. 14.07.2017
  • Новые материалы

    Мой процесс подачи заявки в Школе программного обеспечения и дизайна Тьюринга
    Мой последний пост на Medium был в конце августа, и в нем я пообещал написать еще раз, рассказывая историю моего процесса подачи заявки в Школу программного обеспечения и дизайна Тьюринга ...

    Генерация ваших собственных удивительных QR-кодов с использованием Python
    QR-код (код быстрого ответа) — это разновидность матричных штрих-кодов (или двумерных штрих-кодов), изобретенных в 1994 году японской автомобильной компанией Denso Wave . Штрих-код —..

    Прогресс в технологии Трансформеров часть 3
    Многомасштабный управляющий сигнальный преобразователь для бесфазного синтеза движения (arXiv) Автор: Линтао Ван , Кун Ху , Лей Бай , Юй Дин , Ваньли Оуян , Чжиюн Ван . Аннотация:..

    Представляем поддержку компонентов Vue.js. Мгновенный HMR и многое другое.
    Хотя у FuseBox уже был плагин Vue, он был базовым и не имел многих функций, которые делали работу с Vue.js такой приятной. Однако с этим выпуском мы рады сообщить, что в FuseBox..

    Приключения в Javascript, часть 1
    Я продолжаю думать о том, чтобы писать больше, но чем больше я думаю об этом, тем меньше я это делаю. Итак, сегодня я перестал думать и начал писать. Отсюда можно только спускаться… В..

    Понимание дженериков в TypeScript: подробное руководство
    Введение TypeScript, строго типизированный надмножество JavaScript, хорошо известен своей способностью улучшать масштабируемость, удобочитаемость и ремонтопригодность приложений. Одной из..

    Учебные заметки JavaScript Object Oriented Labs
    Вот моя седьмая неделя обучения программированию. После ruby ​​и его фреймворка rails я начал изучать самый популярный язык интерфейса — javascript. В отличие от ruby, javascript — это более..