首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Eclipse中创建ecj.jar文件

在Eclipse中创建ecj.jar文件
EN

Stack Overflow用户
提问于 2017-01-24 13:50:17
回答 1查看 1.4K关注 0票数 1

为了支持类似于Java的语言(MaxJ),我对MaxJ插件做了一些修改。我所做的更改可以在这里找到:

维护

我的插件的发布可以在这里找到:

https://github.com/maxeler/eclipse/releases

当我在GUI模式下使用eclipse时,一切都很好,但是我想编译不同的项目(在无头构建或使用ant),为此我需要创建新的ecj.jar文件。我试着建了这个图书馆

https://github.com/maxeler/maxpower

根据这一条:

adapter.htm

可以使用jdtCompilerAdapter.jar代替ecj.jar,但这是行不通的,因为它不包含编译器类(如CompilerOptions等)。在build.xml文件中,我更改了以下行:

代码语言:javascript
复制
<taskdef name="maxjcompiler" classname="org.eclipse.jdt.core.ant.taskdef.MaxjTask" classpath="${env.MAXCOMPILERDIR}/lib/MaxIDE/ecj.jar" onerror="ignore"/>
<taskdef name="maxjdoc" classname="org.eclipse.jdt.core.ant.taskdef.MaxjDocTask" classpath="${env.MAXCOMPILERDIR}/lib/MaxIDE/ecj.jar"/>

在这方面:

代码语言:javascript
复制
<taskdef name="maxjcompiler" classname="org.eclipse.jdt.core.ant.taskdef.MaxjTask" classpath="/pathToMyJar/jdtCompilerAdapter.jar" onerror="ignore"/>
<taskdef name="maxjdoc" classname="org.eclipse.jdt.core.ant.taskdef.MaxjDocTask" classpath="/home/ikulezic/Desktop/jdtCompilerAdapter.jar"/>

然后运行以下命令来启动构建过程:

代码语言:javascript
复制
ant

它会产生以下错误:

代码语言:javascript
复制
Buildfile: /home/ikulezic/Desktop/maxpower/build.xml
 [taskdef] Could not load definitions from resource org/jacoco/ant/antlib.xml. It could not be found.

clean:
  [delete] Deleting directory /home/ikulezic/Desktop/maxpower/bin

compile:
    [echo] 
    [echo] Using maxeda classpath '/opt/maxcompiler/lib/MaxCompiler.jar'
    [echo]   (Precedence: 1. $MAXCOMPILERJCP, 2. $MAXCOMPILERDIR)
    [echo] 
    [echo]                 
   [mkdir] Created dir: /home/ikulezic/Desktop/maxpower/bin

BUILD FAILED
/home/ikulezic/Desktop/maxpower/build.xml:66: Could not create type maxjcompiler due to java.lang.NoClassDefFoundError: org/eclipse/jdt/internal/compiler/impl/CompilerOptions
       at org.eclipse.jdt.core.ant.taskdef.MaxjTask.<init>(MaxjTask.java:80)
       at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
       at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
       at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
       at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
       at org.apache.tools.ant.AntTypeDefinition.innerCreateAndSet(AntTypeDefinition.java:328)
       at org.apache.tools.ant.AntTypeDefinition.createAndSet(AntTypeDefinition.java:274)
       at org.apache.tools.ant.AntTypeDefinition.icreate(AntTypeDefinition.java:219)
       at org.apache.tools.ant.AntTypeDefinition.create(AntTypeDefinition.java:206)
       at org.apache.tools.ant.ComponentHelper.createComponent(ComponentHelper.java:285)
       at org.apache.tools.ant.ComponentHelper.createComponent(ComponentHelper.java:263)
       at org.apache.tools.ant.UnknownElement.makeObject(UnknownElement.java:429)
       at org.apache.tools.ant.UnknownElement.maybeConfigure(UnknownElement.java:163)
       at org.apache.tools.ant.Task.perform(Task.java:347)
       at org.apache.tools.ant.Target.execute(Target.java:435)
       at org.apache.tools.ant.Target.performTasks(Target.java:456)
       at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1393)
       at org.apache.
 at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
       at org.apache.tools.ant.Project.executeTargets(Project.java:1248)
       at org.apache.tools.ant.Main.runBuild(Main.java:851)
       at org.apache.tools.ant.Main.startAnt(Main.java:235)
       at org.apache.tools.ant.launch.Launcher.run(Launcher.java:280)
       at org.apache.tools.ant.launch.Launcher.main(Launcher.java:109)
Caused by: java.lang.ClassNotFoundException: org.eclipse.jdt.internal.compiler.impl.CompilerOptions
       at org.apache.tools.ant.AntClassLoader.findClassInComponents(AntClassLoader.java:1366)
       at org.apache.tools.ant.AntClassLoader.findClass(AntClassLoader.java:1315)
       at org.apache.tools.ant.AntClassLoader.loadClass(AntClassLoader.java:1068)
       at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
       ... 24 more

Total time: 0 seconds

目前看来,构建一个新的ecj.jar文件似乎是唯一的选择,但我无法找到一种方法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-25 21:17:09

如何构建ecj.jar取决于您使用的构建技术。

如果您已经配置了上下文,以便可以使用org.eclipse.jdt.core Maven/Tycho构建,那么您应该调整项目的pom.xml中的batch-compiler执行。

否则,一种更轻量级的方法应该是使用调用scripts/export-ecj.xml。该文件可能有点过时,但您可以看看它是如何适应于创建另一个ecj变体(对于OT/J),参见:http://git.eclipse.org/c/objectteams/org.eclipse.objectteams.git/tree/org.eclipse.jdt.core/scripts/export-ecj.xml

对于OT/J,这个脚本是从基于Ant的PDE构建过程中调用的,因此对于独立调用,需要首先配置一组属性。

  • 集成apt和工具需要那些同级项目位于预期的位置,以及像build.root.dir集这样的属性。否则,评论apt和tool的部分应该会让您开始工作。
  • buildLabel设置为有用的

有了这些准备,我可以在IDE中成功地运行Ant。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41829932

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档