`

Eclipse构建项目时需要注意的地方

阅读更多
    这个本来应该是写在项目组开发BLOG上的。但最近换了办公环境之后,项目组原来的BLOG服务器搬到其它地方去了。现在还没有恢复项目组内部BLOG,所以,记在这里,待日后再恢复吧:)

    昨天代码从一个分支Merge到主干版本,我的本地开发环境建立上有问题。连续出现在新开发环境中无法运行测试用例。跟踪发现是项目中使用的实体工具的问题。究其原因在于系统无法找到hibernate.cfg.xml文件。

    我们知道JAVA程序在编译的时候,是通过CLASSPATH来访问各种资源,很明显的,hibernate.cfg.xml是放在Eclipse的CLASSPATH路径下的。(因此,我将需要使用的这些文件都作为src,那么自然这些文件都会在CLASSPATH的路径中)实体工具使用的datasource.xml配置正确,hibernate.cfg.xml关于hibernate的configuration也配置正确,但是DOCTYPE定义不对

<!DOCTYPE rootElement PUBLIC "PublicIdentifier" "URIreference">

<!DOCTYPE rootElement SYSTEM "URIreference"[
declarations
]>


PublicIdentifier 提供一个独立的标识符,有些 XML 分析器可以使用该标识符引用 DTD,代替 URIreference。如果使用分析器的系统没有网络连接,或该连接可能会明显减慢处理速度,可以使用此标识符。

在实际中
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>

这样写才是符合规范的。

<!DOCTYPE hibernate-configuration SYSTEM "hibernate-configuration-3.0.dtd">

定义成这种方式,最主要的问题是如何找到hibernate-configuration-3.0.dtd这个文件,具体放到那个目录下呢?

以前读DOCTYPE解析代码的时候,发现它就是从文件系统中找。但是,加载位置非常奇怪,如果是<!DOCTYPE hibernate-configuration SYSTEM "/hibernate-configuration-3.0.dtd">,那就是应用所在的根目录地址,比如:d:\

现在这么写的话,这个目录在什么地方呢?有几个地方,一个在CLASSPATH下,已经证明错误。在什么其它地方?莫非在ECLIPSE的Classpath下?这就真的不清楚了。事实上这个问题非常让人困扰。

如果我们的引用要解析XML文件需要用到的DTD在远端,显然不合适。想了一下,我们直接在DOCTYPE中定义文档类型结构定义不就OK了么?
代码如下:


<!DOCTYPE hibernate-configuration [
	
	<!ELEMENT hibernate-configuration (session-factory,security?)>	
	
	<!ELEMENT property (#PCDATA)>
	<!ATTLIST property name CDATA #REQUIRED>
	
	<!ELEMENT mapping EMPTY> <!-- reference to a mapping file -->
	<!ATTLIST mapping resource CDATA #IMPLIED>
	<!ATTLIST mapping file CDATA #IMPLIED>
	<!ATTLIST mapping jar CDATA #IMPLIED>
	<!ATTLIST mapping package CDATA #IMPLIED>
	<!ATTLIST mapping class CDATA #IMPLIED>
	
	<!ELEMENT class-cache EMPTY>
	<!ATTLIST class-cache class CDATA #REQUIRED>
	<!ATTLIST class-cache region CDATA #IMPLIED>
	<!ATTLIST class-cache usage (read-only|read-write|nonstrict-read-write|transactional) #REQUIRED>
	<!ATTLIST class-cache include (all|non-lazy) "all">
	
	<!ELEMENT collection-cache EMPTY>
	<!ATTLIST collection-cache collection CDATA #REQUIRED>
	<!ATTLIST collection-cache region CDATA #IMPLIED>
	<!ATTLIST collection-cache usage (read-only|read-write|nonstrict-read-write|transactional) #REQUIRED>
	
	<!ELEMENT event (listener*)>
	<!ATTLIST event type (auto-flush|merge|create|delete|dirty-check|evict|flush|flush-entity|load|load-collection|lock|refresh|replicate|save-update|save|update|pre-load|pre-update|pre-insert|pre-delete|post-load|post-update|post-insert|post-delete|post-commit-update|post-commit-insert|post-commit-delete) #REQUIRED>
	
	<!ELEMENT listener EMPTY>
	<!ATTLIST listener type (auto-flush|merge|create|delete|dirty-check|evict|flush|flush-entity|load|load-collection|lock|refresh|replicate|save-update|save|update|pre-load|pre-update|pre-insert|pre-delete|post-load|post-update|post-insert|post-delete|post-commit-update|post-commit-insert|post-commit-delete) #IMPLIED>
	<!ATTLIST listener class CDATA #REQUIRED>
	
	<!ELEMENT session-factory (property*, mapping*, (class-cache|collection-cache)*, event*, listener*)>
	<!ATTLIST session-factory name CDATA #IMPLIED> <!-- the JNDI name -->
	
	<!ELEMENT security (grant*)>
	<!ATTLIST security context CDATA #REQUIRED> <!--the JACC contextID-->
	
	<!ELEMENT grant EMPTY>
	<!ATTLIST grant role CDATA #REQUIRED>
	<!ATTLIST grant entity-name CDATA #REQUIRED>
	<!ATTLIST grant actions CDATA #REQUIRED>
]>


这样,系统在解析hibernate.cfg.xml的时候也不用去找dtd定义,直接读取这个文件就OK了。问题到此已经解决了。

回想一下,XML当初要把DTD分离出来就是为了复用的目的,但是,在我们的应用场合,我们不需要这样的复用。相反,都放在一个文件当中效率还提高了。真是两极矛盾。
分享到:
评论

相关推荐

    我安装时最新版eclipse

    在安装最新版Eclipse时,需要注意以下关键知识点: 1. **版本选择**:Eclipse有多个版本,如Photon、Oxygen、202x系列等,每个版本都有其特定的更新和特性。最新版通常在Eclipse官网可下载,例如Eclipse IDE for ...

    Eclipse中配置Struts2项目指南

    2. 安装 Tomcat:下载并解压缩 Tomcat,拷贝到一个地方,需要注意的是需要把 JDK6 目录中的 tools.jar 拷贝到 Tomcat 中的 lib 目录下。 3. 安装 Eclipse:下载并解压缩 Eclipse,得到一个 eclipse 目录,把这个目录...

    Eclipse中links插件方法

    - 分离源码与构建:有时为了区分源码和构建产物,会将构建目录放在单独的地方,links则能方便地将两者关联。 3. **创建Links的步骤:** - 打开Eclipse,进入"File"菜单,选择"New",然后点击"Linked Folder"。 -...

    Eclipse下载

    在使用Eclipse时,用户需要创建工作空间(Workspace),这是存储项目和配置的地方。Eclipse提供了强大的代码编辑器、项目管理、版本控制集成、构建工具和调试器等功能。对于初学者,理解Eclipse的视图(Views)、...

    Eclipse集成Android NDK

    9. **构建和运行**: 最后,你可以像平常一样在Eclipse中构建和运行项目。Eclipse会自动调用NDK来编译本地代码,并将其与Java代码一起打包进APK。 通过以上步骤,你就能在Eclipse中成功集成Android NDK,进行混合式...

    eclipse核心配置1

    - **工作空间设置**:Eclipse的工作空间是项目存储的地方,可以设置默认位置,以及自定义编码格式、构建路径等。 - **JRE配置**:选择要使用的Java运行环境,包括JDK版本和路径。 - **插件安装与管理**:Eclipse通过...

    eclipse 64bit解压可用

    对于初学者,安装Eclipse时,需要注意以下几点: 1. 确保操作系统是64位的,以匹配下载的64位Eclipse版本。 2. 下载完成后,解压到任何方便的位置,无需安装过程,直接运行可执行文件即可启动Eclipse。 3. 首次启动...

    Eclipse中OpenGL的配置

    2. **创建Eclipse项目**:在Eclipse中新建一个Java项目,这是我们将编写和运行OpenGL程序的地方。 3. **导入JOGL库**:将JOGL的`.jar`文件添加到项目的构建路径中。右键点击项目 -&gt; "Build Path" -&gt; "Configure ...

    完全正确的eclipse安装+调试

    运行Eclipse,首次启动时会提示设置工作空间,这是保存项目和配置信息的地方。建议选择一个空旷且容易访问的位置,以便于管理和备份。设置完毕后,Eclipse将会加载并显示其主界面。 接下来是插件的安装,这里以...

    Eclipse各个版本下载以及基础配置

    运行Eclipse,首次启动会提示设置工作空间,这是保存项目的地方。选择一个合适的位置,确保有足够的磁盘空间。 配置Eclipse的基础步骤包括: 1. **安装JDK**: Eclipse需要Java Development Kit(JDK)才能运行。...

    eclipse RCP入门示例介绍

    7. **WorkSpace(工作空间)**:工作空间是 Eclipse 存储项目文件的地方。每个 Eclipse 实例只能在一个时间使用一个工作空间,但多个 WorkbenchWindow 可以共享同一个工作空间。 8. **Perspective(透视图)**:...

    eclipse nebula部件

    - **性能优化**:由于Nebula组件功能强大,需要注意性能优化,避免在大数据量或复杂界面时出现性能问题。 总之,Eclipse Nebula是一个非常有价值的工具,它极大地丰富了Eclipse的UI开发能力,使得开发者能够构建出...

    Eclipse实用教程

    - 工作区:Eclipse的工作区是项目存储的地方,可以设置多个工作区以区分不同项目。 - 工作区切换:在“文件”菜单中选择“切换工作区”进行切换。 3. **创建Java项目** - 新建项目:在"文件"菜单中选择"新建"-&gt;...

    64位eclipse免安装版

    - 在首次启动时,可能会提示选择工作空间(workspace),这是存储项目文件的地方。 - 可以根据个人习惯对界面进行自定义调整,比如布局、字体大小等。 - 如果需要支持特定的语言开发,可以通过“Help”菜单中的...

    RecyclerView eclipse版本使用

    - 在使用RecyclerView时,注意性能优化,如使用ViewHolder减少视图复用的开销,以及在合适的地方调用notifyDataSetChanged()更新数据。 - 如果遇到编译问题,检查依赖库的版本是否与项目支持的Android版本兼容。 ...

    Eclipse应用开发完全手册.part1.rar

    安装Eclipse时,用户需要注意选择适合自己开发需求的版本,如Java EE版、经典版等。工作空间是Eclipse中存储项目和个人设置的地方,理解其作用并合理配置能提升开发效率。项目管理涉及创建、导入、组织和构建项目,...

    eclipse详细的安装

    工作空间是Eclipse保存项目和配置的地方,你可以根据需要设置。 2. **配置Eclipse**:在启动界面,你可以通过“工作区”选项选择或创建一个新的工作空间。此外,Eclipse会询问是否导入之前的设置,这取决于你的个人...

    Eclipse RCP+Spring建胖客户端Web程序

    传统的Web 2.0和丰富的互联网应用(RIA)虽然流行,但在某些场景下可能无法满足特定的需求,特别是当需要更复杂的交互和本地资源访问能力时。在这种背景下,Eclipse Rich Client Platform (RCP)作为一种新兴的选择,...

    eclipse-jee-2023-09-R-win32-x86-64.zip

    - 首次启动时,Eclipse会引导你进行工作空间设置,这是存放项目和配置信息的地方。 - 根据需要安装或更新插件,Eclipse的Marketplace提供了丰富的选择。 2. **Eclipse界面**: - 工作台(Workbench):包含多个...

    eclipse环境配置

    - **工作空间设置**:`File &gt; Switch Workspace &gt; New...`可创建新工作空间,工作空间是Eclipse保存项目和个人首选项的地方。 - **项目创建**:通过`File &gt; New &gt; Project`创建新项目,选择相应类型的Java项目,如...

Global site tag (gtag.js) - Google Analytics