令我惊讶的是,Eclipse生成的build.xml文件中没有包含调用jar任务的元素。与通常的代码生成一样,我认为您必须使用它并且不进行任何编辑,这样您就可以完全地重新生成或避免代码生成。生成文件中的注释表明,可能可以通过导入扩展功能来避免编辑。
<!-- WARNING: Eclipse auto-generated file.
Any modifications will be overwritten.
To include a user specific buildfile here, simply create one in the same
directory with the processing instruction <?eclipse.ant.import?>
as the first entry and export the buildfile again. -->我想我可以在第二个名为export.xml的文件中使用export.xml元素。在ant脚本中,每个构建文件应该有一个项目,所以现在有第二个项目,它依赖于第一个项目中的目标。
重新生成的build.xml显示它包含了预期的“导入”。
<import file="export.xml"/>
不幸的是,这是行不通的。运行ant (我在命令行中这样做)似乎只会导致导出/jar项目被忽略。
带有导入元素的生成脚本(嵌套在第7行).
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project basedir="." default="build" name="ohana1">
<property environment="env"/>
<property name="debuglevel" value="source,lines,vars"/>
<property name="target" value="1.8"/>
<property name="source" value="1.8"/>
<import file="export.xml"/>
<path id="ohana1.classpath">
<pathelement location="bin"/>
<pathelement location="../export/ohana1/commons-collections-3.2.1.jar"/>
</path>
<target name="init">
<mkdir dir="bin"/>
<copy includeemptydirs="false" todir="bin">
<fileset dir="src">
<exclude name="**/*.launch"/>
<exclude name="**/*.java"/>
</fileset>
</copy>
</target>
<target name="clean">
<delete dir="bin"/>
</target>
<target depends="clean" name="cleanall"/>
<target depends="build-subprojects,build-project" name="build"/>
<target name="build-subprojects"/>
<target depends="init" name="build-project">
<echo message="${ant.project.name}: ${ant.file}"/>
<javac debug="true" debuglevel="${debuglevel}" destdir="bin" includeantruntime="false" source="${source}" target="${target}">
<src path="src"/>
<classpath refid="ohana1.classpath"/>
</javac>
</target>
<target description="Build all projects which reference this project. Useful to propagate changes." name="build-refprojects"/>
<target description="copy Eclipse compiler jars to ant lib directory" name="init-eclipse-compiler">
<copy todir="${ant.library.dir}">
<fileset dir="${ECLIPSE_HOME}/plugins" includes="org.eclipse.jdt.core_*.jar"/>
</copy>
<unzip dest="${ant.library.dir}">
<patternset includes="jdtCompilerAdapter.jar"/>
<fileset dir="${ECLIPSE_HOME}/plugins" includes="org.eclipse.jdt.core_*.jar"/>
</unzip>
</target>
<target description="compile project with Eclipse compiler" name="build-eclipse-compiler">
<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
<antcall target="build"/>
</target>
</project>export.xml文件意味着创建一个jar..。
<?eclipse.ant.import?>
<project basedir="." default="export" name="ohana1Export">
<target depends="build,make-jar" name="export"/>
<target name="make-jar">
<jar destfile="../export/ohana1/${ant.project.name}.jar" basedir="bin"/>
</target>
</project>注意,Eclipse编辑器抱怨这个export.xml文件,因为这个项目/构建文件中不存在名为build的目标(它是一个依赖项)。build目标位于生成的build.xml中。这个错误可能来自一个“愚蠢”的编辑器,所以我开始运行ant。从命令行调用ant,我发现没有生成jar文件。
如果您需要导出一个ant文件,那么我是否应该得出结论,Eclipse的.jar脚本生成器是无用的,并且一个人应该维护满足所有需求的ant脚本?
发布于 2017-01-12 07:54:56
是的,在我看来导出的build.xml是无用的,就像Eclipse一样,如果目的是制造一个.jar。
具体做以下几点。
ant的普通.jar脚本。这篇文章底部的链接有关于脚本的逐字文本。您可以使用内置Xml Editor通过New > Other > XML > XML File创建这个新文件,这个文件可能被称为makeJar.xml并保存它。如果Package Explorer中显示的图标仍然是一个普通的XML文件图标,则项目可能会将该图标更改为Ant文件图标。将来,您可以使用Open With来获取Ant Editor而不是XML Editor。此脚本将取代用户将通过Eclipse执行的.jar的手动导出。Project > Properties > Builders中。它将在建筑商名单中排在第二位。在构建者列表中的第一位是应该已经存在的Java Builder。当调用Eclipse构建时,将按照Builders列表中显示的顺序处理整个Builders列表。因此,不仅会生成.class文件,而且还会生成.jar。实现的是更大的自动化,因为.class生成和.jar生成现在集成了,这可以说是使用导出的build.xml来生成.jar的失败尝试的关键。
下面是Project > Properties > Builders的对话框,您可以使用它来创建一个新的生成器。选择New,然后选择Ant Builder。我给新的makeJar取名为Builder。

下面是新的Ant生成器的对话框,它允许您浏览到buildfile,这是手动编写的创建.jar文件的Ant脚本。在本例中,脚本是makeJar.xml。它还允许您在运行脚本时浏览到要使用的base directory。

在设置了新的生成器之后,一个项目“干净”或项目“构建”将创建.class文件和.jar。
Eclipse有关此主题的文档位于链接处。请注意,似乎不可能将包含说明的确切页面链接起来,因此您必须浏览文档树到关于"Ant作为项目构建器“的部分。
https://stackoverflow.com/questions/41583724
复制相似问题