我正在尝试在两个模型之间进行转换, 除了在独立模式下使用eclipse之外,每件事情似乎都没问题, 尝试以编程方式从java执行转换时出错,
如何解决?它的urg。谢谢你的帮助,抱歉我的英语不好。
错误:
ResourcesPlugin.getWorkspace().getRoot();
线程“main”中的异常java.lang.IllegalStateException:Workspace已关闭。 在org.eclipse.core.resources.ResourcesPlugin.getWorkspace(ResourcesPlugin.java:399)
File f = new File(Path);
URI transformationURI = URI.createFileURI(f.getAbsolutePath());
resource = resourceSet.getResource(transformationURI, true);`
线程“main”中的异常org.eclipse.emf.ecore.resource.impl.ResourceSetImpl $ 1DiagnosticWrappedException:org.xml.sax.SAXParseException:prolog中不允许使用内容。 at org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.handleDemandLoadException(ResourceSetImpl.java:315) at org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.demandLoadHelper(ResourceSetImpl.java:274) at org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.getResource(ResourceSetImpl.java:397)
当我省略该行时:
//resource = resourceSet.getResource(transformationURI, true);
我得到另一个例外:
线程“main”java.lang.ExceptionInInitializerError中的异常 在org.eclipse.m2m.qvt.oml.TransformationExecutor.doLoad(TransformationExecutor.java:205) 在org.eclipse.m2m.qvt.oml.TransformationExecutor.loadTransformation(TransformationExecutor.java:108) 在org.eclipse.m2m.qvt.oml.TransformationExecutor.execute(TransformationExecutor.java:137)
引起:java.lang.NullPointerException 在org.eclipse.m2m.internal.qvt.oml.compiler.UnitResolverFactory $ Registry $ 1.readFactories(UnitResolverFactory.java:66) 在org.eclipse.m2m.internal.qvt.oml.compiler.UnitResolverFactory $ Registry $ 1.(UnitResolverFactory.java:44) 在org.eclipse.m2m.internal.qvt.oml.compiler.UnitResolverFactory $ Registry。(UnitResolverFactory.java:43) ......还有6个
答案 0 :(得分:0)
如this question所述,您必须运行Eclipse应用程序以确保完成所有必要的Eclipse设置。
对于没有UI的“无头”应用程序,IApplication
类可以非常简单:
public class Application implements IApplication
{
@Override
public Object start(final IApplicationContext context)
throws Exception
{
.. your code here ...
return IApplication.EXIT_OK;
}
@Override
public void stop()
{
// No action
}
private static void ensurePluginStarted(String id)
{
Bundle bundle = Platform.getBundle(id);
if (bundle != null)
{
if ((bundle.getState() & Bundle.ACTIVE) == 0)
{
try
{
bundle.start(Bundle.START_TRANSIENT);
}
catch (BundleException ex)
{
ex.printStackTrace();
}
}
}
}
}
此应用程序可以使用Eclipse工作区,但不能使用UI。在某些情况下,可能需要调用ensurePluginStarted
方法以确保您要使用的所有插件都在运行。尝试使用UI的任何插件都将失败。
如果您需要UI,则需要完整的Eclipse RCP。