[size=large][b]1、虚拟盘[/b][/size]
如果做java开发的时候,开发环境、产品jar包、产品代码有好几个G,目录也比较多的时候,似乎把整个环境虚拟成一个虚拟盘是个不错的选择。如下,把我一个project虚拟成了X盘(setX.bat):
虚拟成X盘之后,可以像操纵普通的盘区一样操作X盘了。在此刻看来只是简化了访问的路径,不过如果你遇到过因为classpath过长导致的CreateProcess error的时候,如下:
你会发现,虚拟盘也不失为一种解决问题的办法,比起自己写classloader,简便多了。
[size=large][b]2、构造eclipse的userlibraries[/b][/size]
如果在项目或者产品中,发现用到了太多的jar包,甚至可能这些包又被分为了多类,如第三方包、产品平台的包、标准产品业务功能的包、行业产品的包,那么如果通过eclipse里头一个一个的添加jar包,可不是人干的事,动辄几百的jar包,一个个的添加。而另外还可能随着产品的开发,新加入的包,通过手工加入jar包显然不是有效的解决办法。如果有种自动的办法可以生成一个eclipse里的userlibraries,那就不错了。下边就介绍这么一种方法(在进行一下操作之前,请确保ant和perl已经安装并设置了环境变量):
[b]2.1、[/b]通过ant把需要处理的jar目录包括进来(build_library.xml):
此处,我把所有jar包放到了X盘的lib目录,当然,根据你的需要,你可以分成thirdpart、platform、standard、industry等多个target,放入到多个文件中在后边使用。
[b]2.2、[/b]通过perl把2.1生成的userlibraries格式化为eclipse中标准的userlibraries(power_tool.pl):
里边用到了perl的package(my_constants.pm),主要是统一管理一些东西,里边主要是一些变量:
[b]2.3、[/b]生成userlibraries
通过运行perl命令,我们就可以构造出userlibraries了:
生成的userlibraries的内容如下:
[b]2.4、[/b]更进一步的自动化
我们创建clean-build_libraries.bat批处理文件,把perl命令放入其中,我们就不用打开cmd然后敲入perl命令了,直接双击即可:
自动化构造userlibraries的功能已经完成了!
只需要在eclipse里点着项目右键,Build Path -> Add Libraries... -> User Library -> Next -> User Libraries -> Import -> Browse 选择生成的my_library.userlibraries文件,然后OK -> OK ->选择libraries -> Finish,就把library加入到了自己的project。
注:附件为源码,这个是特定于我的本地开发环境的,如果你要使用,需要修改路径。
如果做java开发的时候,开发环境、产品jar包、产品代码有好几个G,目录也比较多的时候,似乎把整个环境虚拟成一个虚拟盘是个不错的选择。如下,把我一个project虚拟成了X盘(setX.bat):
@echo off
rem 如果存在X盘,则先删除
if exist X: subst /d X:
rem 把E:\workspaces\workspace-java\food虚拟成X盘
subst X: E:\workspaces\workspace-java\food
虚拟成X盘之后,可以像操纵普通的盘区一样操作X盘了。在此刻看来只是简化了访问的路径,不过如果你遇到过因为classpath过长导致的CreateProcess error的时候,如下:
Exception occurred executing command line.
Cannot run program "D:\Program Files\Java\jdk1.6.0_18\bin\javaw.exe" (in directory "E:\workspace\myproject"): CreateProcess error=87
你会发现,虚拟盘也不失为一种解决问题的办法,比起自己写classloader,简便多了。
[size=large][b]2、构造eclipse的userlibraries[/b][/size]
如果在项目或者产品中,发现用到了太多的jar包,甚至可能这些包又被分为了多类,如第三方包、产品平台的包、标准产品业务功能的包、行业产品的包,那么如果通过eclipse里头一个一个的添加jar包,可不是人干的事,动辄几百的jar包,一个个的添加。而另外还可能随着产品的开发,新加入的包,通过手工加入jar包显然不是有效的解决办法。如果有种自动的办法可以生成一个eclipse里的userlibraries,那就不错了。下边就介绍这么一种方法(在进行一下操作之前,请确保ant和perl已经安装并设置了环境变量):
[b]2.1、[/b]通过ant把需要处理的jar目录包括进来(build_library.xml):
<?xml version="1.0" encoding="utf8"?>
<!--把X盘lib目录下的所有jar包路径都放进文件my_library.libiaries-->
<project name="build_library" basedir="." default="make_library_file">
<path id="all_lib">
<fileset dir="X:/lib/">
<include name="**/*.jar"/>
</fileset>
</path>
<target name="make_library_file">
<property name="lib_list" refid="all_lib"/>
<echo file="my_library.userlibraries">${lib_list}</echo>
</target>
</project>
此处,我把所有jar包放到了X盘的lib目录,当然,根据你的需要,你可以分成thirdpart、platform、standard、industry等多个target,放入到多个文件中在后边使用。
[b]2.2、[/b]通过perl把2.1生成的userlibraries格式化为eclipse中标准的userlibraries(power_tool.pl):
require "my_constants.pm";
#调用ant,构造userlibraries;注意 使用ant命令前必须确认ant已经加入到环境变量
system("call ant -f build_library.xml");
#读取ant写入的jar文件路径,然后关闭文件
unless(open(LIB,$my_constants::LIBRARIES_FILE_NAME)) {
die "Fail to open to read $my_constants::LIBRARIES_FILE_NAME\n";
}
#读取整个文件
@temp = <LIB>;
close(LIB);
#整合成一个字符串
$content = join("",@temp);
chomp($content);
#根据;号拆分成数组
@liblist = split(";",$content);
#重新写入格式化的library文件
unless(open(FILE,">$my_constants::LIBRARIES_FILE_NAME")){
die "Fail to open to write $my_constants::LIBRARIES_FILE_NAME\n";
}
print FILE $my_constants::LIB_HEAD;
#写文件头
foreach $line (@liblist) {
$line =~ s/\\/\//g;
print FILE $my_constants::ARCHIVE_PATH_PART;
print FILE $line;
print FILE $my_constants::ARCHIVE_SRC_PART;
#正则匹配出盘符、路径名和文件名,在后边设置source的时候会用到
$line =~ m/(\w):(.*)[\\\/]([\w\d-_\.]+)\.jar/g;
#设置class默认链接的源代码,当然此处要根据实际情况调整源码目录或者此处的设置
print FILE "$1:/src$2";
print FILE $my_constants::SRC_END;
print FILE $my_constants::ARCHIVE_END;
}
print FILE $my_constants::LIB_END;
close(FILE);
里边用到了perl的package(my_constants.pm),主要是统一管理一些东西,里边主要是一些变量:
#放到package里
package my_constants;
#eclipse里user library的格式
#
#<?xml version="1.0" encoding="ASCII"?>
#<eclipse-userlibraries version="1">
# <library name="lib_for_me.userlibraries" systemlibrary="false">
# <archive path="V:/lib/port-client.jar" source="V:/src/port-src.jar"/>
# </library>
#</eclipse-userlibraries>
#
#
#userlibraries的名称
$LIBRARIES_FILE_NAME = "my_library.userlibraries";
#这里应该是定义多行变量吧
#这里倒数第二行TEMP与行首之间不能有空格。倒数第一行;前边可以有空格,但必须另起一行
$LIB_HEAD = <<TEMP
<?xml version="1.0" encoding="ASCII"?>
<eclipse-userlibraries version="1">
<library name="$LIBRARIES_FILE_NAME" systemlibrary="false">
TEMP
;
$LIB_END = <<TEMP
</library>
</eclipse-userlibraries>
TEMP
;
#<archive path="X:/lib/spring-server.jar" source="V:/src/spring-src.jar"/>
$ARCHIVE_PATH_PART = "\t\t<archive path=\"";
$ARCHIVE_SRC_PART = "\" source=\"";
$ARCHIVE_END = "\"/>\n";
$SRC_END = "-src.jar";
[b]2.3、[/b]生成userlibraries
通过运行perl命令,我们就可以构造出userlibraries了:
perl power_tool.pl
生成的userlibraries的内容如下:
<?xml version="1.0" encoding="ASCII"?>
<eclipse-userlibraries version="1">
<library name="my_library.userlibraries" systemlibrary="false">
<archive path="X:/lib/antlr/antlr-2.7.6.jar" source="X:/src/lib/antlr-src.jar"/>
...
<archive path="X:/lib/toplink/toplink-essentials.jar" source="X:/src/lib/toplink-src.jar"/>
</library>
</eclipse-userlibraries>
[b]2.4、[/b]更进一步的自动化
我们创建clean-build_libraries.bat批处理文件,把perl命令放入其中,我们就不用打开cmd然后敲入perl命令了,直接双击即可:
perl power_tool.pl
自动化构造userlibraries的功能已经完成了!
只需要在eclipse里点着项目右键,Build Path -> Add Libraries... -> User Library -> Next -> User Libraries -> Import -> Browse 选择生成的my_library.userlibraries文件,然后OK -> OK ->选择libraries -> Finish,就把library加入到了自己的project。
注:附件为源码,这个是特定于我的本地开发环境的,如果你要使用,需要修改路径。