在Eclipse中使用Ant的类路径

我有一个Ant build.xml文件在命令行上运行正常:它编译,构建JAR,我能够从JAR执行main方法就好了。 build.xml文件引用了分散在这里和那里的几个第三方库。 构建JAR时,脚本不会将所有第三方库都包含在JAR本身中。 相反,它将他们的路径放入JAR的清单中。 这有助于保持我的JAR苗条和整洁。

我希望能够在Eclipse中编辑和调试我的项目,但我找不到一个简单的方法。 我可以让我的项目使用Ant文件来构建项目,这似乎有效。 但是,Eclipse无法找到第三方库,因此Eclipse存在两个问题:

  1. 它显示(在文本编辑器中)很多编译错误,因为许多类是未定义的,并且
  2. 它无法执行JAR。

我可以通过手动指定两个不同的地方(即通过Properties->Java Build Path->Libraries构建路径,以及通过Run Configurations->Classpath执行类Run Configurations->Classpath )来解决上述两个问题,所有第三方库。 但似乎我不应该手动执行此操作,因为所有第三方库已经列在我的JAR清单中。 我究竟做错了什么?

这是我的build.xml文件:

                                                    

您可以看到我在多个目录中有第三方库( ${lib}${hive-util}${hpdb}${static} )。 我使用它们来创建一个名为dep.runtimepath 。 然后我在构建我的jar时在清单中包含dep.runtime如何让Eclipse在执行时使用相同的dep.runtime作为构建路径和类路径?

perl的替代方法是使用嵌入式groovy任务 :

                 import groovy.xml.MarkupBuilder project.log "Creating .classpath" new File(".classpath").withWriter { writer -> def xml = new MarkupBuilder(writer) xml.classpath() { classpathentry(kind:"src", path:properties["src.dir"]) classpathentry(kind:"output", path:properties["classes.dir"]) classpathentry(kind:"con", path:"org.eclipse.jdt.launching.JRE_CONTAINER") project.references."dep.runtime".each { classpathentry(kind:"lib", path:it) } } }       

笔记:

  • bootstrap目标将下载第三方groovy jar(不依赖于perl)
  • Groovy可以直接访问“dep.runtime”ANT路径并迭代其内容
  • Groovy非常支持编写XML文件。

以下答案类似,另外还生成Eclipse .project文件。

  • 使用Apache Ivy和netbeans

我想出了以下解决方法,灵感来自@ leeand00提供的链接。

首先,我编写了一个简单的Perl脚本(称为genClasspath.pl ),它生成Eclipse使用的.classpath文件。

 #!/usr/bin/perl use strict; if (@ARGV != 2) { print STDERR "Usage: $0 OUTFILE CLASSPATHSTRING\n"; print STDERR "eg, $0 .classpath path1:path2:path3\n"; exit 1; } my $OUTFILE = $ARGV[0]; my $CLASSPATHSTRING = $ARGV[1]; open my $out_fh, '>', $OUTFILE or die "Couldn't open output file: $!"; print $out_fh q{     }; my @libs = split(":", $CLASSPATHSTRING); foreach my $thisLib (@libs){ print $out_fh " \n"; } print $out_fh "\n"; 

然后,我让我的build.xml文件使用dep.runtime的内容调用此脚本:

           

唯一的问题是我需要在Eclipse中打开项目之前至少在命令行上运行一次Ant。 但是当我这样做时,Eclipse能够很好地编译和执行我的项目,因为类路径与Ant完全相同。