Ant学习 之 [致命错误]

第一次在CSDN写博客(作者注:本文最初发表在我的CSDN博客上)......

这几天因为要重构项目(之前的项目开发太烂了...),人手又不够,所以我们这两三个码畜是既当码畜又赶鸭子上架做着项目经理的活...为了更好的管理项目,被老板拉着学了些项目版本管理的东西,虽然本行是 “两耳不闻身外事,一心只撸咱的码”,但是学点儿版本控制的这些东西毕竟还是非常有用的。

在老板的建议下从Ant入手,再加上一些SVN的分支管理,应该够平时用的了吧...

Ant这个东西很早就在eclipse见到过,myeclipse更是少不了它:
![](http://image.xueliang.org/20140427022139343)

刚接触了Ant差不多一个星期,感觉是还是挺简单的。和写java一样,只要理清思路,稍微看一下文档,很容易上手。

废话不扯了,最近碰到一个问题,困了我两天了,不是解决不了,而是网上很少有相应的解决方案......刚刚把这个问题给Kill掉,鸡冻之余,分享一下!

【前提】:使用Ant打WAR包

【思路】:

1、初始化一些参数(包括项目根目录、src目录、WebContent目录、lib目录以及对应的build的根目录、lib目录、classes目录等等)

2、使用` <mkdir /> `创建build需要的目录

3、使用` <javac />`编译java源文件,并保存到build的classes目录下

4、使用 `<copy /> `复制项目下的lib目录到build中与之对应WEB-INF目录下

5、使用`<war /> `打包

【问题】:在进行第3步编译src下的java文件时总是提示: ` [javac] 致命错误: 在类路径或引导类路径中找不到程序包 java.lang`

有图有真相:
![](http://image.xueliang.org/20140427031923031)

部分源代码如下:
```xml
  <target name="compile" depends="mkdirs,copy.lib" description="javac"><!-- 编译源代码  同时指定依赖 -->
    <javac srcdir="${pty.dir.proj.src}" destdir="${pty.dir.proj.build.classes}" encoding="utf-8">
      <bootclasspath>
        <fileset dir="${pty.dir.lib.tomcat}">
          <patternset refid="pat.find.jar"></patternset>
        </fileset>
        <fileset dir="${pty.dir.proj.web.lib}">
          <patternset refid="pat.find.jar"></patternset>
        </fileset>
      </bootclasspath>
    </javac><!-- 执行编译 指定源代码目录及编译文件输出目录-->
  </target>
```

【解决过程】:因为是周末,一直宅在家里,百度 + Google苦搜无果,换着关键词搜来搜去只有第一页的十来个,也不是我想要的。大哭

中间费了九牛二虎之力偶尔一次可以编译成功了,我还忘了备份一下了。直接在源代码上又接着改了什么,结果又坏掉了...........大哭

一种说法:    找不到 java_home设置不正确;

第二种说法:classpath环设置不正确;

第三种说法:重装JDK...

第四种说法:classpath应该加上dt.jar、rt.jar、tools.jar

第五种说法:环境变量去掉空格(估计有很多人和我一样,JDK是装在X:\Program Files\下的)

第六种说法:忘了.......

总之很多...

在苦苦挣扎中,我还是不放弃...每次只改一个可疑的地方,每改一次都要运行一下,看看会不会对了......

功夫不负有心人,当我把`<bootclasspath /> `换成` <classpath />` 时,奇迹再次出现了...

我之前没仔细研究这两者之间的差别,才多走了很多冤枉路。

亲,不知道你是不是和我犯的一样的错误...如果是现在大概明白了吧...如果还不明白就去查下`<bootclasspath />`和 `<classpath />`的区别吧...

附:
网上有一段话解释到:【`bootclasspath`参数(启动类库):它已经包含了jre/lib目录下的rt.jar,以及我们自定义的类库。如果使用classpath参数,仅指我们定义的库。】,所以反推之,如果我们已经在环境变量里指定了rt.jar等,这里只需要指定引入的第三方jar(如servlet-api.jar、log4j.jar、spring.jar、axis.jar等),则在`<javac />` 使用`classpath`指定这些jar即可。如果误用了`bootclasspath`去指定这些第三方的jar,而没有指定rt.jar等这些很可能会报和我一样的【致命错误】...(我的理解是`bootclasspath`覆盖了环境变量里的设置)。如果一定要用`bootclasspath`,则应该指定rt.jar这些JDK自带的jar(不过我没试过...)

碎觉!

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值