`

Java 调用 Eclipse的编译器 JDT

    博客分类:
  • java
阅读更多

Java 调用 Eclipse的编译器 JDT

想给项目做一个Nightly build,项目特点如下:

1 使用 Eclipse开发的java和GWT混合项目

2 目前有40多个工程

3 项目处于初期,很多部分尚未稳定,因此是工程是工程间依赖工程,没有引用编译好的jar包

4 工程主要分为前台clt,公共模块common,和服务器模块svr。例如有一个A.common,一定有A.clt和A.svr依赖于A.common,但clt和svr间不相互依赖。

(这是我们项目的编译过程的特殊逻辑)

 

以下是选定的技术路线 

 

  1. 因为编译带有特殊的逻辑,所以使用方便编程的java,而非纯ant脚本。
  2. 不想自己整理工程的编译顺序,太多,麻烦。所以使用了dom4j读取eclipse工程配置信息。
  3. 不用ant脚本,可以使用Java程序调用Ant API。
  4. 由于javac对模板的不友好 ,所以使用jdt

 

例如以下的代码

<!-- <br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />-->package  demo.server;

import  com.extjs.gxt.ui.client.data.BaseModel;

public   class  TestA  extends  BaseModel {

    @Override
    
public   < X >  X get(String property) {
        
return   super .get(property);
    }
}

 

 

使用javac编译,就会出现

无法确定 <X>X 的类型参数;对于上限为 X,java.lang.Object 的类型变量 X,不存在唯一最大实例

 

虽然搜索了以下,说只要返回值强制转换一下就ok,即return (X)super .get(property);

但这样的代码也比较多,明明在eclipse编译通过的,在javac就不行。所以g了一下,才知道 eclipse有自己的编译器(?不太确认javac和jdt的关系),叫jdt。

 

首先要从Eclipse中,抽取出一个JDT的包。在Eclipse/plugin目录下,找到一个org.eclipse.jdt.core _3.5.1.v_972_R35x.jar,(版本社么的没有关系)。用winrar解压出里面的一个jdtCompilerAdapter.jar包,然后从工程中引用它。

 

顺便把

org.eclipse.jdt.compiler.tool_1.0.100.v_972_R35x.jar

org.eclipse.jdt.core_3.5.2.v_981_R35x.jar

org.eclipse.jdt.debug.ui_3.4.1.v20090811_r351.jar

这几个包也从eclipse/plugin中引用到项目里。——为什么要单独解压jdtCompilerAdapter.jar,我不太清楚啊。

 

然后,由于要调用ant,所以从apache上的ant项目中下载http://ant.apache.org/bindownload.cgi,用到两个包,

ant.jar

ant-launcher.jar

 

使用以下代码,调用ant 

<!-- <br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />-->package  thss.platform.util.mrobuild;

import  java.io.File;

import  org.apache.tools.ant.Project;
import  org.apache.tools.ant.taskdefs.Javac;
import  org.apache.tools.ant.taskdefs.Javac.ImplementationSpecificArgument;
import  org.apache.tools.ant.types.Path;

public   class  JavaBuilder {

    
public  JavaBuilder() {
    }

    
public   void  execute(Path classPath, File output) {
        Project currentProject 
=   new  Project();
        
//  填写工程的绝对目录,这样后面可以使用相对目录
        currentProject.setBaseDir( new  File( " 这里是工程的绝对目录 " ));

        Javac compileJava 
=   new  Javac();
        compileJava.setProject(currentProject);
        
//  调用jdt编译器
        compileJava.setCompiler( " org.eclipse.jdt.core.JDTCompilerAdapter " );
        compileJava.setClasspath(classPath);
        compileJava.setEncoding(
" UTF-8 " );

        
//  填写相对目录src
        compileJava.setSrcdir( new  Path(currentProject,  " src " ));
        
//  编译后的结果.class输出到哪里
        compileJava.setDestdir(output);
        compileJava.setTarget(
" 1.6 " );
        compileJava.setSource(
" 1.6 " );
        compileJava.setNowarn(
true );
        compileJava.setDebug(
true );
        compileJava.setDebugLevel(
" lines,source " );

        
//  javac需要这段,换成了jdt不知道要不要了
        ImplementationSpecificArgument arg  =  compileJava.createCompilerArg();
        arg.setLine(
"  -Xlint " );

        compileJava.execute();

    }
}

 

 

可能上述文章有很多概念性的问题,例如我没有搞清的javac和jdt关系,但是问题确实是解决了,欢迎高手批评指正。by Anic

 

文章来源:http://www.cnblogs.com/anic/archive/2010/03/24/1692271.html

分享到:
评论

相关推荐

    org.eclipse.jdt.core_3.2.0.v_671

    5. **Java编译器**:JDT包含一个全功能的Java编译器,可以在源代码编辑过程中实时检查语法错误和类型不匹配,提供即时反馈。 6. **重构工具**:JDT提供了多种代码重构功能,如提取方法、重命名变量、移动类等,帮助...

    jdt需要的jar包

    4. **编译器库**:`org.eclipse.jdt.compiler.apt`和`org.eclipse.jdt.internal.compiler`包含了Eclipse的Java编译器实现,用于将源代码转换为AST和字节码。 5. **插件系统库**:Eclipse是基于插件的,`org.eclipse...

    Java编译器eclipse

    1. **Java编译器JDT**:Eclipse中的Java Development Toolkit (JDT)是其核心组件之一,负责Java编程的支持。JDT包含了完整的Java编辑器,它可以提供语法高亮、自动完成、错误检测等功能,极大地提高了开发效率。此外...

    Java Development Tooling Developer Guide

    - **`org.eclipse.jdt.core.compiler`**:包含 Java 编译器的 API。 - **`org.eclipse.jdt.core.dom`**:提供用于操作 Java 抽象语法树(AST)的 API。 - **`org.eclipse.jdt.core.eval`**:用于执行 Java 表达式和...

    ant 编译用 jdt_jars

    这样,Ant就可以调用JDT的编译器来进行Java源码的编译工作,而不仅仅是依赖于系统默认的javac编译器。这有几个好处: 1. **兼容性**:JDT编译器可以处理较新的Java语言特性,即使你的Java运行环境不支持这些特性。 ...

    Java 动态编译源码并调用

    Java 动态编译源码并调用是Java开发中的一种高级技巧,它允许程序在运行时根据需要编译和执行新的代码。这种能力在某些场景下非常有用,例如插件系统、元编程或者在运行时自动生成和执行特定逻辑。下面我们将详细...

    eclipse编译.class所需jar包

    Eclipse自带了Java编译器JDT(Java Development Tools),它可以自动处理依赖的库,并将源码编译为符合Java虚拟机执行的字节码。但当遇到没有源码的第三方库时,.class文件的反编译就显得尤为重要。 接下来,我们...

    eclipse-java-2022-06-R-win32-x86_64.zip

    2. **JDT**:Java Development Tools是Eclipse的核心组件,提供了源代码编辑器、编译器、调试器和项目管理工具。它支持语法高亮、自动代码完成、重构等功能。 3. **项目管理**:在Eclipse中,项目是组织代码和资源...

    Java开发工具(eclipse)

    - JDT是Eclipse的核心组成部分,专门针对Java开发,包含了用于编写、调试和测试Java应用的所有工具。 10. **RCP(Rich Client Platform)** - Eclipse RCP允许开发者利用Eclipse的框架构建自定义的应用程序,不仅...

    Using the ant javac adapter

    `org.eclipse.jdt.core`是Eclipse的核心Java开发组件,负责解析、编译和索引Java源代码;`org.eclipse.jdt.core_3.6.2.v_A76_R36x.jar`和`org.eclipse.jdt.core_3.5.2.v_981_R35x.jar`可能是不同版本的这个组件,...

    jdt 核心知识

    Java Development Toolkit(JDT)是Eclipse IDE中的核心组件,专门用于支持Java开发。它提供了一系列强大的工具和服务,包括代码编辑、语法高亮、自动完成、错误检查、重构以及调试等功能,极大地提高了Java程序员的...

    Java编辑工具eclipse

    根据描述,我们需要为Java开发配置环境,所以请确保选择带有"Java Development Tools"(JDT)的Eclipse IDE版本。 2. **解压与启动**: 下载完成后,通常是一个.zip或.tgz文件,将其解压缩到你希望存放的目录,然后...

    在eclipse当中运行tomcat源代码需要的jar包

    这是Eclipse Java开发工具(JDT)的核心库,包含了用于Java编程的编译器、调试器和核心API。当你在Eclipse中运行Tomcat源代码时,需要这个库来解析和编译Java源文件。Eclipse JDT允许开发者进行语法检查、自动完成...

    eclipse安装包eclipse安装包

    Eclipse分为多个版本,例如JDT(Java Development Tools)适用于Java开发,CDT(C/C++ Development Tools)用于C/C++,PDT(PHP Development Tools)用于PHP,以及众多针对特定技术或行业的版本。对于初学者,通常...

    eclipse 使用 AST 简单解析抽象语语法树所需要的jar包

    1. `org.eclipse.jdt.core_3.2.0.v_671.jar`:这是Eclipse Java开发工具(JDT)的核心库,包含了用于Java编程语言的全面解析、类型系统和编译器功能。其中的AST API允许开发者创建、修改和分析Java源代码的AST。 2....

    eclipse.zip

    例如,Eclipse的Java开发工具(JDT)提供智能代码补全、错误检查和重构功能,极大地提高了开发效率。同时,它也支持Mylyn任务管理,可以与版本控制系统如Git集成,还有Spring Tool Suite等用于企业级开发的工具。 ...

    eclipse插件开发之扩展项目特性

    JDT模型提供了对Eclipse中Java元素(如类、接口、方法等)的访问和操作。`IJavaElement`接口是所有Java元素的基础,它包含了各种方法,如获取元素类型、获取父元素、获取子元素等。在项目特性的实现中,我们可能...

    eclipse ast开发库

    Eclipse AST开发库是Eclipse Java Development Tools (JDT) 插件的一部分,它提供了一组强大的工具,用于处理和分析Java源代码。这个库的核心功能是构建和操作Java程序的抽象语法树(Abstract Syntax Tree,AST)。...

    ant.jar wsdl4j-1.5.1.jar jaxrpc.jar jasper-jdt.jar

    jasper-jdt.jar可能是Eclipse环境下Jasper编译器的特定版本,用于在Eclipse环境中开发和调试JSP应用。 这些库在Java开发中的重要性不言而喻,它们共同构建了从项目构建到Web服务交互再到动态网页处理的完整生态。...

    eclipse中文文档.zip

    对于Java开发者,Eclipse的Java Development Tools (JDT) 插件是核心部分。文档会详细解释如何编写、运行和调试Java代码,以及如何使用JUnit进行单元测试。此外,Eclipse的Content Assist功能(通常通过快捷键Ctrl+...

Global site tag (gtag.js) - Google Analytics