繁体   English   中英

Ant的运行时类路径找不到Javac的依赖项

[英]Ant's runtime classpath can't find dependencies for javac

我正在尝试让Ant编译我的项目,该项目具有以下目录结构:

MyProject/
    src/main/java/
        com/
            <The rest of my source>
    gen/
        bin/
            main/
                <Where I want all Java sources compiled to>
    lib/
        main/
            <All of my dependencies>
    build.xml
    build.properties

这是我的Ant任务:

<path id="src.main.java.path">
    <fileset dir="src/main/java">
        <include name="**.*java"/>
    </fileset>
</path>

<path id="lib.main.path">
    <fileset dir="lib/main">
        <include name="**.*jar"/>
    </fileset>
</path>

<target name="compile">
    <javac includeantruntime="true" srcdir="src/main/java" destdir="gen/bin/main">
        <!--
        Define a new classpath composed of all main Java sources and main Java dependencies,
        and use them for this compilation.
        -->
        <classpath>
            <pathelement path="src.main.java.path"/>
            <pathelement path="lib.main.path"/>
        </classpath>
    </javac>
</target>

我应该提到build.xml位于项目根目录下,并且它的basedir属性设置为"." (项目根目录)。

当我运行“编译”任务时,我遇到100多个编译器错误,找不到我的项目依赖项(例如Guice,Joda-Time,XStream等):

compile:
    [javac] Compiling 53 source files to /<path-to-my-project-root>/MyProject/gen/bin/main
    [javac] /<path-to-my-project-root>/MyProject/src/main/java/org/me/Widget.java:37: package com.google.inject does not exist
    [javac] import com.google.inject.AbstractModule;
    [javac]                         ^
    [javac] /<path-to-my-project-root>/MyProject/src/main/java/org/me/MyWidget.java:45: cannot find symbol
    [javac] symbol: class AbstractModule
    [javac] public class AppUziContext extends AbstractModule {
    [javac]            

BUILD FAILED
/<path-to-my-project>/MyProject/build.xml:51: Compile failed; see the compiler error output for details.

...该列表列出了100多个错误,所有错误看起来都像这样,但对于找不到的每个依赖项,它们都是不同的。

我相信问题出在我配置的路径中,并且正在javac/classpath引用,但是在阅读了Ant文档之后,我无法弄清楚我要去哪里。 提前致谢!

在目标中尝试以下操作:

<classpath>
    <path refid="src.main.java.path"/>
    <path refid="lib.main.path"/>
</classpath>

我通常为目标创建完整的类路径,然后在目标中使用单线类路径:

<path id="target.class.path">
    <path refid="src.main.java.path"/>
    <path refid="lib.main.path"/>
</path>

然后在目标中:

<classpath refid="target.class.path"/>

pathelement的记录不是很好, 是从ant网站获得的最好的东西。 请注意,在这些示例中, <pathelement path=始终与属性一起使用,否则,它是<pathelement location ,带有实际的文件夹名称(也可以是属性)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM