如何使JavaC将现有的类文件复制到目标目录



我希望有人能给我一个建议。。。

问题

在我项目的源目录中,有些包包含的资源不是".java"-文件。现在我需要把编译后的".class"-文件放在那里。问题是,当我构建最终的JAR时,ANT会过滤掉它们。".dll"one_answers".png"文件不会被过滤掉。

如何实现将所有内容复制到目标目录?

我使用以下Ant任务:

<javac srcdir="${src}" destdir="${temp}" target="1.5" encoding="8859_1" debug="${compile.withdebug}" >
  <classpath refid="libs_path" />
</javac>

背景

我不得不在最后的JAR中放入多个其他依赖于操作系统的JAR(SWT发行版)。在程序启动时只加载一个JAR。但是,如果没有任何特殊的类加载器,就不可能让JVM从JAR加载JAR。因此,我将所有JAR提取到一个包中,JVM现在就可以加载它们了。

为什么我想把它们放在源代码下(Java包中)?因为我想将它们相对于helper Java类引用:

org.example.swt_jars
   swt_linux_32
   swt_linux_64
   swt_win_32
   swt_win_64
   SWTJarsResources.java

谢谢!

Javac是一个编译器;让它四处移动文件是使用了错误的工具。

我建议简单地在<javac>任务之前或之后直接使用Ant复制任务来移动现有的类文件。类似于:

<copy todir="${temp}">
    <fileset dir="${src}">
        <include name="**/*.class" />
    </fileset>
</copy>

EDITfor Eclipse:您在这里真正想做的不是让Eclipse复制文件,而是让它识别出其中有需要引用的类。因此,最简单的方法也是我首先尝试的方法是将src目录标记为包含类和包含源的的位置。

我不知道这是否适用于Eclipse——例如,IDEA不允许文件夹以这种方式兼用。再说一遍,它似乎不是一个合适的工具,因为IDE构建只是整理运行应用程序所需的二进制文件,而基于一些项目设置复制文件似乎是错误的。

最终,我不认为您的设计是最干净的,将类与源文件混合可能会令人困惑。我很感激您这样做是因为您想使用相对引用,但也许您应该从文件系统本身中抽象出来,并使用Classloader.findResource()(或者可能是getResourceAsStream())。通过这种方式,您可以随心所欲地排列文件,只要您在类路径上同时使用两个目录运行应用程序,Java就能够找到您想要的资源。这将给你更多的灵活性,以及解决这个特殊的情况。

相关内容

  • 没有找到相关文章

最新更新