我有一个使用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脚本的代码如下:
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任务:
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
如果我直接在Eclipse中执行我的Ant脚本,我没有任何问题,因为默认情况下,在Eclipse首选项中将此任务定义为Ant-&gt; Runtime-&gt; Tasks。
问题可能是在Java代码中执行的Ant脚本不会运行为&#34;在与项目相同的JRE中运行&#34;。
我在plugin.xml中定义了Ant Task,它在类路径中运行Eclipse Application,也作为扩展:
<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>
有谁知道如何解决我的问题?
提前致谢并致谢。
答案 0 :(得分:0)
缺少Apache IVY库,从此处下载此库 - apache并将jar复制到ant lib目录中并添加到类路径中。
下载jar并安装Ant(例如,C:\ Apps \ Tools \ apache-ant-1.9)。
下载jar并解压常春藤(例如,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。
答案 1 :(得分:0)
您可以尝试更改
吗?自:
<taskdef name="http://www.eclipse.org/qvt/1.0.0/Operational:transformation" classname="org.eclipse.m2m.internal.qvt.oml.runtime.ant.QvtoAntTransformationTask">
要:
<taskdef name="transformation" classname="org.eclipse.m2m.internal.qvt.oml.runtime.ant.QvtoAntTransformationTask">
将名称空间前缀删除到transformation
任务/元素。