Eclipse报告——Eclipse中关于AspectJ插件的报告

来源:互联网 发布:c语言关键字scanf 编辑:程序博客网 时间:2024/06/15 19:17
*:此文章为个人开发报告书,若有说错或者概念错误,希望来信silentbalanceyh@126.com,并且在评论里面给予纠正,谢谢提点)

1.开发环境:

开发用OSWindows Server 2008

开发用IDEOracle Workshop for WebLogic 10.3.0(以前的BEA Workshop Studio

开发Web容器:Tomcat 5.5.27

开发数据库:MySQL Community Server

AspectJ插件:http://download.eclipse.org/tools/ajdt/33/update1.5.3-->1.6.x

2.现象描述:

昨天晚上我在平台IDE上安装了AspectJ插件,因为网速原因,我直接从上边地址下载下来过后安装到IDE平台里面,安装的第二天,我的自动更新提示有新插件,所以我就更新了,更新过后第三天的时候出现了“插件冲突”,使得AspectJ插件可以使用,但是Java的代码编辑器出现了下边的现象:

所有的Java编辑器里面报错的地方,在Package Explorer工作区里面不报错,而且取消Eclipse的自动编译过后,直接编译了过后使得Eclipse不能输出Java.class二进制文件了,然后在Tomcat容器中出现了ClassNotFoundException的异常。后来问题升华到Java代码里面即使有错也能够编译通过。

最开始以为是项目的代码问题,但是我把项目迁移到PC机的时候也出现了问题,然后创建了一个新的项目,环境和配置一模一样的,没有问题,可以运行,而且编译也会报错,所以怀疑Eclipse创建的项目文件出了问题。

3.配置文件浅析:

Eclipse创建工程过程:

首先:File-->New-->Project

(出现的导航视图里面,选择Web目录下的Dynamic Web Project,大部分WTP平台都可以创建此类型的项目)

然后选择好了过后直接选择(详细说明以保证不会有不同环境的误解,见谅!)

Dynamic Web Module2.4

Hibernate3.2

Java6.0

Java Annotation Processing Support5.0

JPA1.0

JSTL1.1

Eclipse创建了工程过后,会出现以下的目录结构:

其主要配置目录结构有三个:

目录:.settings

文件:.classpath

文件:.project

简单介绍一下此三个文件目录:(网上资料的整合版本)

.settings目录:此文件目录下边有以下文件,主要分析以下所有Eclipse应该有的文件

org.eclipse.jdt.core.prefs内容:(写字板打开)

#Fri Oct 10 16:07:49 CST 2008

eclipse.preferences.version=1

org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6

org.eclipse.jdt.core.compiler.compliance=1.6

org.eclipse.jdt.core.compiler.problem.assertIdentifier=error

org.eclipse.jdt.core.compiler.problem.enumIdentifier=error

org.eclipse.jdt.core.compiler.source=1.6

org.eclipse.jst.common.project.facet.core.prefs内容

#Fri Oct 10 16:07:49 CST 2008

classpath.helper/org.eclipse.jdt.launching.JRE_CONTAINER/:/:org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/:/:Sun/owners=jst.java/:6.0

classpath.helper/org.eclipse.jst.server.core.container/:/:org.eclipse.jst.server.tomcat.runtimeTarget/:/:Apache/ Tomcat/ v6.0/owners=jst.web/:2.5

eclipse.preferences.version=1

V猜测:这两个文件是Eclipse的工程的基本环境文件,其中第二个是基于Web项目的,只有Web项目会出现第二个环境配置,应该是与项目文件无关的,而且在项目相关操作中除非在配置里面修改,否则这些文件应该在每个工程下边都是一样的。)

.classpath文件内容:

<?xmlversion="1.0"encoding="UTF-8"?>

<classpath>

<classpathentrykind="src" path="src"/>

<classpathentrykind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/jrockit_160_05"/>

<classpathentrykind="con" path="org.eclipse.jst.server.core.container/org.eclipse.jst.server.tomcat.runtimeTarget/Apache Tomcat v5.5"/>

<classpathentrykind="con" path="org.eclipse.jst.j2ee.internal.web.container"/>

<classpathentrykind="con" path="org.eclipse.jst.j2ee.internal.module.container"/>

<classpathentrycombineaccessrules="false"kind="src" path="/com.iknowing.sc.sitebao.v6.framework.service"/>

<classpathentrykind="con" path="org.eclipse.jdt.USER_LIBRARY/Compass2.1"/>

<classpathentrykind="con" path="org.eclipse.jdt.USER_LIBRARY/Lucene"/>

<classpathentrykind="con" path="org.eclipse.jdt.USER_LIBRARY/MySQL"/>

<classpathentrykind="con" path="org.eclipse.jdt.USER_LIBRARY/Spring2.5"/>

<classpathentrykind="con" path="org.eclipse.jdt.USER_LIBRARY/Tiles2.0"/>

<classpathentrykind="src" path=".apt_src">

<attributes>

<attributename="optional"value="true"/>

</attributes>

</classpathentry>

<classpathentrykind="output"path="build/classes"/>

</classpath>

上边文件描述了工程相关依赖文件:

1.源文件具体位置:<classpathentry kind="src" path="src"/>、kind="src"属性,其目录相对于Eclipse创建的工程根目录

2.运行的系统环境:主要指定了使用的JVM的类型,如果是Web项目,还有运行的Web容器的类型

3.这里有一个属性:combineaccessrules="false",此属性一般建立的时候是建立的一个项目应该不会出现,如果我们在创建项目的时候创建的是几个项目,项目发布相互需要依赖的时候就需要在此处设置,com.iknowing.sc.sitebao.v6.framework.service为我们自己创建的此发布项目的一个依赖项目。

4.项目的输出目录:kind="output"属性设置了项目的输出目录

BLOGhttp://www.javaeye.com/topic/257120里面:还提及到library的具体位置kind="lib"的属性项以及配置的项目生成的文档的位置:"javadoc_location"

V猜测:在Eclipse里面我使用到的载入jar包的方式有以下几种:

1.直接将jarImportWEB-INF/lib下边,这种仅仅限制于WEB工程项目使用;

2.直接在Java Build Path里面添加外联的jar文件,添加的文件和系统使用的Library同级目录;

3.创建自己的User Library,然后在里面添加外联的jar文件,添加的库与系统使用的Library同级目录,jar文件为库的子目录

4.直接使用系统提供的Library

鉴于BLOGhttp://www.javaeye.com/topic/257120上提及到的kind="lib"可能是Eclipse载入jar包的方式属第二种或者第四种,而我使用的是User Library的方式,所以我这里显示的配置文件里面还是kind="con",只是这里使用Eclipse内部变量:org.eclipse.jdt.USER_LIBRARY,至于四种的好坏和四种到底好坏我不是很清楚,个人习惯来定吧!)

.project文件:

此文件为描述问题的文件出现位置,在我们安装了AspectJ插件过后,点击项目右键会多一个选项:

AspectJ Tools --> Convert To AspectJ Tools选项,一旦选择了转换过后,.project文件发生了变化:

转换项目之前:

<?xmlversion="1.0"encoding="UTF-8"?>

<projectDescription>

<name>com.iknowing.sc.sitebao.v6.framework.website</name>

<comment></comment>

<projects>

    <project></project>

   <!--依赖项目的项目列表-->

</projects>

<buildSpec>

<buildCommand>

<name>org.eclipse.jdt.core.javabuilder</name>

<arguments>

</arguments>

</buildCommand>

<buildCommand>

<name>org.eclipse.wst.common.project.facet.core.builder</name>

<arguments>

</arguments>

</buildCommand>

<buildCommand>

<name>org.eclipse.wst.validation.validationbuilder</name>

<arguments>

</arguments>

</buildCommand>

<buildCommand>

<name>com.m7.nitrox.nitroxbuilder</name>

<arguments>

</arguments>

</buildCommand>

</buildSpec>

<natures>

<nature>org.eclipse.wst.common.project.facet.core.nature</nature>

<nature>org.eclipse.jdt.core.javanature</nature>

<nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>

<nature>org.eclipse.jem.workbench.JavaEMFNature</nature>

<nature>com.m7.nitrox.webProjectNature</nature>

</natures>

</projectDescription>

转换项目过后:

<?xmlversion="1.0"encoding="UTF-8"?>

<projectDescription>

<name>com.iknowing.sc.sitebao.v6.framework.website</name>

<comment></comment>

<projects>

</projects>

<buildSpec>

<buildCommand>

<name>org.eclipse.ajdt.core.ajbuilder</name>

<arguments>

</arguments>

</buildCommand>

<buildCommand>

<name>org.eclipse.wst.common.project.facet.core.builder</name>

<arguments>

</arguments>

</buildCommand>

<buildCommand>

<name>org.eclipse.wst.validation.validationbuilder</name>

<arguments>

</arguments>

</buildCommand>

<buildCommand>

<name>com.m7.nitrox.nitroxbuilder</name>

<arguments>

</arguments>

</buildCommand>

</buildSpec>

<natures>

<nature>org.eclipse.ajdt.ui.ajnature</nature>

<nature>org.eclipse.wst.common.project.facet.core.nature</nature>

<nature>org.eclipse.jdt.core.javanature</nature>

<nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>

<nature>org.eclipse.jem.workbench.JavaEMFNature</nature>

<nature>com.m7.nitrox.webProjectNature</nature>

</natures>

</projectDescription>

主要出现在高亮度的两行里面,先看看网上大部分讲述的.project文件:

<name></name>标签:描述了工程的名称

<comment></comment>标签:关于工程的相关描述

<projects></projects>标签:里面有一个子标签<project></project>,包含了我们设置的依赖的项目的列表,比如你建立的项目A,项目Abuild PathProject标签里面添加了一个项目叫做B,则这个标签内就会出现一个<project>B</project>,这里B是代表了另外一个项目名,即另外一个项目的.project文件里面的<name></name>里面的值

<buildSpec></buildSpec>标签:V猜测:里面包含了整个项目在编译过程中的编译规则,使用什么插件来驱动编译器进行编译,描述了Eclipse平台在整个项目Build过程中使用的命令、使用的模块、验证结构和语法等各种操作都在这里进行描述)

<natures></natures>标签:里面包含了Eclipse在启动时加载此项目需要使用的插件,如果启动很慢可以将一部分插件Cancel掉,这些插件会在启动过后打开相关联文件的时候自动加载进来,这样可以让Eclipse启动速度加快一点点(*:这种小做法并不能将Eclipse速度优化)

4.解决方案:

<buildSpec></buildSpec>标签里面第一行org.eclipse.ajdt.core.ajbuilder替换成为org.eclipse.jdt.core.javabuilder

分析:AspectJ的项目Convert之所以会改变编译规则,主要是因为AspectJ里面有它特殊的语法,比如关键字aspectpointcut以及afterbefore等,所以这里可能修改掉了编译规则,而且使用插件org.eclipse.ajdt.ui.ajnature来进行语法作色,AspectJ插件使得开发AspectJ的项目会很方便。如果出现相同的现象页可以检查此处的编译规则是否在使用Java编译,因为Eclipse插件里面不仅仅只有此插件是新语法改变了规则的,很多提供了编辑器的插件都会修改掉相关的语法编译规则,这个只是一个侧面。

注意:此问题可能会因为以下情况出现——AspectJ插件出现插件冲突以使得Eclipse里面的AspectJ插件产生了错误而不能使用,而项目又不能回滚,使得编译Java文件没有效果,不仅没有输出的.class文件,而且使得Java编辑器不能正确判断编译时的语法错误而产生。

5.总结:

以上是我在使用AspectJ插件中遇到的一个错误情况,若有错误说法或者语言上的误差,望来信指点:silentbalanceyh@126.com谢谢!

0 0
原创粉丝点击