当前位置: 首页 > 知识库问答 >
问题:

Ant javac源目录不工作

侯向文
2023-03-14

我有一个java项目的Apache ant构建文件,其中包含一个javac命令来编译我的源代码。这个项目有一些特殊的约束,它是由小的子项目组成的。这些子项目中的大多数具有以下文件夹结构:

/docroot
----/WEB-INF
--------/lib
--------/src
-----------A.java
----------- ... (more java classes)
--------/service
-----------B.java
----------- ... (more java classes)

src和service都是源文件夹。A.java导入/service文件夹中的一些类,例如B.java。在eclipse中,一切正常,A.java导入B.java时没有任何错误或问题,所以我假设classpath是正确的。如果我从Ant运行javac命令,当他试图编译A.java时,它会给我一个错误,告诉我:

找不到符号B.java

在我的javac命令中,我设置了一个单一的源目录=docroot/WEB-INF/src。如果我也将docroot/WEB-INF/service设置为源目录,它就可以工作。但是这个解决方案的问题是:一些子项目只有一个单一的源文件夹,“docroot/WEB-INF/src”。这意味着如果我为javac命令设置了两个源目录,对于具有单一源目录“docroot/WEB-INF/src”的项目,它会抛出一个错误,说这个子项目没有文件夹“docroot/WEB-INF/service”。

我该如何解决这个问题?

<antcall target="compile-java">
    <param name="javac.classpathref" value="plugin.classpath" />
    <param name="javac.destdir" value="docroot/WEB-INF/classes" />
    <param name="javac.srcdir" value="docroot/WEB-INF/src" />
    <reference refid="plugin-lib.classpath" torefid="plugin-lib.classpath" />
</antcall>

<target name="compile-java">
    <javac
        classpathref="${javac.classpathref}"
        compiler="${javac.compiler}"
        debug="${javac.debug}"
        deprecation="${javac.deprecation}"
        destdir="${javac.destdir}"
        fork="${javac.fork}"
        includeAntRuntime="false"
        memoryMaximumSize="${javac.memoryMaximumSize}"
        nowarn="${javac.nowarn}"
        encoding="${javac.encoding}"
    >       
        <src path="${javac.srcdir}"/>
    </javac>

    <copy todir="${javac.destdir}">
       <fileset dir="${javac.srcdir}" excludes="**/*.java" />
    </copy>     
</target>

共有2个答案

郎健柏
2023-03-14

现在我找到了一个解决方案。我为每个需要两个源目录来编译的子项目创建了一个单独的构建文件。在这个文件中,我重写了javac命令,为每个特定的情况设置必要的源目录。这样,“常规”javac命令仍将与单个源一起执行,以便与只需要一个源目录的子项目兼容。

倪举
2023-03-14
<src path="${javac.srcdir}"/>

意味着${javac.srcdir}被解释为一个路径(根据您的平台,以克隆或分号分隔),而不是一个目录。所以您可以在这里提供多个目录。

<path id="module.srcdir.path">
  <pathelement location="docroot/WEB-INF/src" />
  <pathelement location="docroot/WEB-INF/services" />
</path>
<property name="module.srcdir" refid="module.srcdir.path" />

<antcall target="compile-java">
    <param name="javac.classpathref" value="plugin.classpath" />
    <param name="javac.destdir" value="docroot/WEB-INF/classes" />
    <param name="javac.srcdir" value="${module.srcdir}" />
    <reference refid="plugin-lib.classpath" torefid="plugin-lib.classpath" />
</antcall>
 类似资料:
  • Git目录 'Git目录'是为你的项目存储所有历史和元信息的目录 - 包括所有的对象(commits,trees,blobs,tags), 这些对象指向不同的分支. 每一个项目只能有一个'Git目录'(这和SVN,CVS的每个子目录中都有此类目录相反), 这个叫'.git'的目录在你项目的根目录下(这是默认设置,但并不是必须的). 如果你查看这个目录的内容, 你可以看所有的重要文件: $>tree

  • 我从 http://alchim31.free.fr/m2e-scala/update-site/ 安装了Maven Scala支持,并使用Eclipse市场安装了Scala IDE插件。我可以使用命令行和来构建项目。Eclipse很好地突出显示了 Scala 代码,如果我导入项目,它就能正确识别其 Scala 性质。但它不将 识别为源文件夹,也不会生成项目。 下面是我的<code>pom.xml

  • 工具目录指的就是你在命令行界面下的时候,当前所在的位置。打开命令行界面以后,一般默认你会在登录的用户的主目录下面。 输出工作目录 pwd ( print working directory)。它可以输出你当前自己所在的位置(工作目录)。执行: pwd 返回的是工作目录的位置: /Users/wanghao /Users/wanghao,最开始的 / 表示的是根(root),macOS 与 Li

  • null b.其他项目之一ProjectAUtilities在PMD步骤失败,即使在PMD的Build.Gradle中忽略错误为true。错误表示有3个测试失败。 c.如何在build.gradle文件(而不是ANT)中为checkstyle/pmd/findbugs使用include/exclude。即除了“src/java”文件夹之外,它不会去做任何事情。 多谢了。

  • 我生成doc与发音插件和它的工作,我添加了一个源目录添加额外的文件到类路径编译(maven-编译器插件).发音不工作与this.how我解决这个问题?我得到这个错误:[ERROR]未能执行目标org.codehaus.enunciate: maven-en

  • Electron 的源代码主要依据 Chromium 的拆分约定被拆成了许多部分。 为了更好地理解源代码,您可能需要了解一下 Chromium 的多进程架构。 源代码的结构 Electron ├──atom - Electron 的源代码 | ├── app - 系统入口代码 | ├── browser - 包含了主窗口、UI 和其他所有与主进程有关的东西,它会告诉渲染进程如何管理页面 |