Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 类路径和Ant构建_Java_Ant - Fatal编程技术网

Java 类路径和Ant构建

Java 类路径和Ant构建,java,ant,Java,Ant,下面的ant compile目标编译使用标记指定的任何src文件夹中的所有.java文件。您可以看到使用标记将许多项添加到类路径中 <target name="compile"> <echo message="${ant.project.name}: ${ant.file}"/> <deps-load-path conf="core" pathid="core.ivy.classpath" /> <d

下面的ant compile目标编译使用
标记指定的任何src文件夹中的所有.java文件。您可以看到使用
标记将许多项添加到
类路径中

<target name="compile">
        <echo message="${ant.project.name}: ${ant.file}"/>

        <deps-load-path conf="core"   pathid="core.ivy.classpath" />
        <deps-load-path conf="test"   pathid="test.ivy.classpath" />

        <javac debug="true" includeantruntime="false" debuglevel="source,lines,vars" destdir="${bin.path}" source="1.8" target="1.8">
            <src path="${xtext.project.path}/src"/>
          <src path="${xtext.project.path}/src-gen"/>
          <src path="${project.path}/src"/>
          <src path="${project.path}/src-gen-umpletl"/>
          <src path="${project.path}/src-gen-umple"/>
          <src path="${project.path}/test"/>
          <src path="${vendors.path}/jopt-simple/src"/>
          <exclude name="**/.git"/>
          <exclude name="**/*.ump" />
          <exclude name="**/data" />
          <classpath refid="project.classpath"/>
          <classpath refid="validator.project.classpath"/>
          <classpath refid="core.ivy.classpath" />
          <classpath refid="test.ivy.classpath" />
            <!-- Add compiler arguments here, see https://ant.apache.org/manual/using.html#arg for details, example below
                  <compilerarg value="-Xlint:deprecation" />
            -->
        </javac>

        <copy todir="${bin.path}" overwrite="true">
            <fileset dir="${project.path}/src"><include name="**/*.grammar"/></fileset>
            <fileset dir="${project.path}/src"><include name="**/*.error"/></fileset>
        </copy>
        <delete file="cruise.umple/src/rules.grammar"/>
        <delete file="cruise.umple/bin/rules.grammar"/>
</target>


其中一项是
project.classpath
,它在文件的其他地方定义为与编译文件写入到的
${bin.path}
位置相同的位置(请参见
标记)。
${bin.path}
如何既是类路径依赖项又是写入
.class
文件的位置?我知道,
${bin.path}
在每次构建之前都会被删除,因此在运行编译目标之前,文件夹中没有任何内容。编译目标执行时生成的
.class
文件是否动态添加到类路径中?

类文件将写入destdir,如果类路径中包含相同的目录,则无关紧要。类路径用于创建类文件,以提供源.java文件中可能缺少的任何类。因此,
destdir
位于类路径上,并且随着编译的进行,
destdir
将填充
.class
文件。这是否意味着
classpath
正在动态变化(即
destir
中填充了
.class
文件)?不过,这似乎是一种奇怪的方式。如果
A.java
需要
B.java
,我们去编译
A.java
,而
B.java
还没有编译,会发生什么?编译器是否会跳过
A.java
,然后在编译
B.java
并将
B.class
放入
destdir
后,返回到
A.java
?这似乎是一场依赖性噩梦。这不再是一个蚂蚁问题,而是关于Java编译器如何工作的问题。让我们先来看一个简单的场景。如果编译中的java文件只引用了其他java文件中的类,那么就不需要类路径,对吗?所有课程都将在本地提供。类路径用于链接到源代码外部的类,通常在第三方jar文件中。管理这些jar文件是真正的依赖关系管理挑战。因此,在Java构建工具(如Maven和GradleOk)中需要像ivy这样的ANT插件来模拟功能,如果我分别编译
元素中包含的每个文件夹会怎么样?我是否需要将包含其他文件夹中的
.class
文件的文件夹放在
类路径
上,以便正确编译(因为其他文件夹将被视为编译文件夹中java文件的外部文件夹)?规则是“如果在当前编译的文件夹之外引用带有
.class
文件的java类,则必须将包含外部类的文件添加到类路径”吗?