WTP技巧系列之打造最小依赖jar包篇

来源:互联网 发布:学校网络限制玩游戏 编辑:程序博客网 时间:2024/05/16 01:53

 

WTP技巧系列之打造最小依赖jar包篇
 
一、引言
WTP是eclipse的子项目,致力于j2ee项目开发,有着广泛的用户和支持者,现在已经是wtp2.x版本了。我从wtp1.5x开始使用,之前用myeclipse,但因为myeclispe是商用软件而且体积庞大一直想找个替代品,既然要作为替代品,那么必须要有非常吸引人的优点,而这些优点,我在wtp中找到了。到目前为止使用wtp已经一年有余了,对wtp开发j2ee已经有了一定的经验积累,独乐乐不如众乐乐,于是打算写一系列的wtp或eclipse的使用技巧,以飨众看官。
 
      
二、Eclipse项目文件之.classpath文件
使用eclipse开发java程序的朋友可能都知道一个eclipse项目默认会在根目录生成两个文件,一个.project文件和一个.classpath文件,前者作为该项目的描述,而后者则是存放项目构建时所需组件的信息,二者都是必须的。
 
有心的朋友如果打开过这两个文件会发现它们的文件结构是xml式的,而文件第一行也明文声明为xml。
 
由于.project跟今天介绍的内容关系不大,所以这里着重介绍.classpath文件。
.classpath文件的根元素是classpath,次级元素是classpathentry,也就是真正描述构建信息的元素。它有两个属性,kind跟path。Kind描述构建信息的类别,而path顾名思义当然是该构建信息的路径。
下面帖出点代码来说明:

<classpathentry kind="src" path="src"/>
<classpathentry kind="con"
    path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="output" path="bin"/>
 

以上是一个默认java工程的.classpath文件的主要内容,分别描述了源文件夹,库文件,输出文件夹。
 
通过以上介绍相信大家对.classpath文件有了个初步认识了,接下来进入今天的正题。
 
 
三、Wtp部署篇
使用过myeclipse的朋友都知道用myeclipse部署应用程序的时候默认情况下会将项目buildpath中的jar包都拷贝到web-inf/lib目录下,因此发布出去的程序一般不需要做额外修改便可正常使用。但使用wtp部署应用程序的时候就不太一样,默认情况下是不会将buildpath中的jar包拷贝到web-inf/lib下的,因此发布出去的程序如果不手动将依赖的jar包拷贝的lib下就会出错。
 
也许很多人看到这里就会问既然myeclipe这个功能如此方便,为什么wtp却做不到呢?那么我来告诉你,虽然myeclipse这个功能非常方便,但是它也有相当的弊端,众所周知,buildpath中的jar包很多是编译的时候需要,而实际运行的时候只需要其中的一部分,因此诸如myeclipse这般将所有jar包拷贝到发布程序中并非明智之举。而wtp也许是看到了这一点,所以设计的时候默认不自动拷贝jar包到发布程序中。那么这样做又是可取的吗?答案是否定的。这会让部署变的麻烦,因为你需要手动将所需jar包拷贝到发布程序中,这对于越来越习惯于“自动化”开发的人们简直是一种折磨。有没有解决办法呢?当然有,这就是本文的核心内容所要介绍的,接下来着重介绍。
 
 
四、打造最小依赖jar包
有心的朋友看到这里或许已经知道在什么地方去实现这个功能了,没错,就是传说中的.classpath文件。
 
看过前面内容的朋友已经知道该文件的作用了,那么我就不多废话直接切入正题。通过自己的摸索,我发现classpathentry元素还有子元素attributes,用来描述classpathentry的附加属性。而每个附加属性通过attribute元素来表达,请看下面代码:

<classpathentry kind="lib" path="lib/mysql-connector-java-5.1.5-bin.jar">
       <attributes>
           <attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/>
       </attributes>
    </classpathentry>

Kind="lib"表示该项是jar包,而后path为jar包的相对/绝对路径。
attribute name="org.eclipse.jst.component.dependency"表示该项信息为项目部署时的依赖项,也就是说需要在部署时自动拷贝到应用程序中去,而后的value就是拷贝时的路径。通过添加这样的代码就达到了自动拷贝的目的,因此只需要将必需的lib或con项手动添加这样的代码,就可以作到部署时生成最小依赖jar包的效果。而对于不需要部署时自动拷贝的lib或con项,则保持默认,比如上面的代码<classpathentry kind="lib" path="lib/mysql-connector-java-5.1.5-bin.jar"/>,这样它只在编译的时候依赖,而运行的时候不依赖。
 
用过ant的朋友看完这段就会发现,这跟ant脚本有异曲同工之妙,只需一次修改,而后无限使用,悠哉乐哉!
注:以上代码是在eclipse3.3.x+wtp2.x中实现,如果跟你的代码有所出入,请自行查资料修改。
 
 
五、结语
学无止境这句至理名言每日都鞭策着我,催我上进。在这个竞争日趋激烈的年代,我们唯有抓紧一分一秒的学习来为自己增加竞争的筹码,只有这样,我们才能在竞争中立于不败。当然,除了知识的补充外,我们更需要的是有一颗探索的心,有探索,才会有创新。
 
说实话,这篇文章没有任何技术含量,因此你若想通过这篇文章获得什么高深的知识的话,那么你将失望。既然这样,那我写这篇文章的意义何在?其实很简单,我想通过它来说明,知识是无穷的,就看你是否抓得住,机遇也一样。
 
(全文完)
 
Java咖啡群欢迎大家加入(加群者送分,顶帖者也送分哈),群号:60446231
本群以讨论IT行业话题为主,本着交流信息的原则,为大家营造一个轻松欢娱的环境,给平时枯燥的工作增添一些调味剂.
当然,技术问题同样在讨论范围之中.
本人在这里欢迎大家的到来,并预祝大家五一快乐.(鼓掌...谢谢...嘿嘿...)
 
Java基础群:49827836
java初学者提供帮助,在讨论及解决问题中共同成长。
原创粉丝点击