金陵之风尘

灰尘,也有生活;
它们在风中飘着,在烟中恋爱,在暖气上抚摸;
它们在好几个地方找我……
posts - 5, comments - 13, trackbacks - 0, articles - 0
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

使用ANT,无法访问conf目录下的文件

Posted on 2008-08-04 02:52 风尘仆仆 阅读(595) 评论(1)  编辑  收藏 所属分类: Java

     在使用ANT的过程中遇到了问题,工程目录下的conf目录存放的是一些配置文件,在程序中需要读取这此文件。
    使用IDE(如JCreator)编译运行程序,在IDE环境中增加了classpath路径“E:\MyProject\conf”后,在Main.java中调用
      ClassLoader.getSystemResource("default.properties");
    可以查找到default.properties文件并获得其路径E:\MyProject\conf\default.properties。
    但是在使用ANT编译运行时,正确设置了<classpath>,可还是无法调用ClassLoader.getSystemResource查找到文件。

工程的目录如下:
E:\MyProject
 |- build
 |  |- classes
 |  |  |- app
 |  |     |- Main.class
 |  |- test
 |  |  |- app
 |        |- MainTest.class
 |
 |- src
 |  |- app
 |     |- Main.java
 |
 |- test
 |  |- app
 |     |- Main.Test.java
 |
 |- lib
 |  |- commons-lang-2.4.jar
 |
 |- conf
 |  |- default.properties
 |
 |- build.xml

build.xml部分内容如下:
<?xml version="1.0"?>

<project name="myproject" default="test" basedir=".">
  <property name="build.dir" value="build"/>
  <property name="src" value="src"/>
  <property name="test.src" value="test"/>
  <property name="lib.dir" value="lib"/>
  <property name="conf.dir" value="conf"/>

  <path id="lib.path">
    <fileset dir="${lib.dir}">
      <include name="**/*.jar"/>
    </fileset>
  </path>
 
  <path id="run.classpath">
    <pathelement location="${build.dir}/classes"/>
    <pathelement location="${conf.dir}"/> <!-- 已经添加了conf目录 -->
    <path refid="lib.path"/>
  </path>
 
  <!-- 测试default.properties是否存在 -->
  <available property="have.conf" resource="default.properties">
    <classpath refid="run.classpath"/>
  </available>
 
  <!-- 运行ant echo时,返回have.conf: true,证明可以找到文件 -->
  <target name="echo">
    <echo message="have.conf: ${have.conf}"/>
  </target>
 
  <!-- 运行ant run时,ClassLoader.getSystemResource("default.properties")返回却为null -->
  <target name="run" depends="compile">
    <java classname="app.Main">
      <classpath refid="run.classpath"/>
    </java>
  </target>
</project>


评论

# re: 使用ANT,无法访问conf目录下的文件  回复  更多评论   

2008-08-07 23:51 by 风尘仆仆
搞定了,不应该使用表态的ClassLoader.getSystemResource("default.properties");

应该:
ClassLoader classloader = Thread.currentThread().getContextClassLoader();
URL url = classloader.getResource("default.properties");

参考Log4j源代码Loader.java

只有注册用户登录后才能发表评论。


网站导航: