Java 如何使用包含特定文件的ant构建创建EAR文件?

Java 如何使用包含特定文件的ant构建创建EAR文件?,java,ant,jakarta-ee,oc4j,ear,Java,Ant,Jakarta Ee,Oc4j,Ear,我正在使用eclipse使用ant构建ear文件。我使用的是oc4j,我想确保orion-application.xml包含在构建中。我目前正在使用但不起作用的是: <target name="ear" depends=""> <echo>Building the ear file</echo> <copy todir="${build.dir}/META-INF"> <fileset dir="${conf.

我正在使用eclipse使用ant构建ear文件。我使用的是oc4j,我想确保orion-application.xml包含在构建中。我目前正在使用但不起作用的是:

<target name="ear" depends=""> <echo>Building the ear file</echo> <copy todir="${build.dir}/META-INF"> <fileset dir="${conf.dir}" includes="orion-application.xml"/> </copy> <ear destfile="${dist.dir}/${ant.project.name}.ear" appxml="${conf.dir}/application.xml"> <fileset dir="${dist.dir}" includes="*.jar,*.war"/> </ear> </target> 构建ear文件 将其添加到耳朵中的正确方法是什么?

应放入
META-INF
文件夹的所有内容都应通过嵌套的
文件集指定:

<ear destfile="${dist.dir}/${ant.project.name}.ear" 
  appxml="${conf.dir}/application.xml">
  <metainf dir="${build.dir/META-INF}"/>
  <fileset dir="${dist.dir}" includes="*.jar,*.war"/>
</ear>

首先,用这个构建一场战争


而不是一只耳朵在同一个蚂蚁任务中。

将其放在java项目目录结构中:

<?xml version="1.0" encoding="UTF-8"?>
<project basedir="." default="test_ear" name="myProject">
    <property name="build.dir" value="WebContent"/>
<target name="test_ear">
    <war destfile="C:/projects/test1.war" needxmlfile='false'>
      <fileset dir="${build.dir}" excludes="*build*.xml"/>
    </war>
    <ear destfile="C:/projects/test1EAR.ear" appxml="WebContent/META-INF/application.xml">
      <fileset dir="C:/projects/" includes="*.jar,*.war"/>
    </ear>
</target>
</project>

尝试以下代码:

    <ear destfile="deploy/iapp.ear"
         appxml="workspace/appEAR/EarContent/META-INF/application.xml">
        <fileset file="workspace/appEJB/appEJB.jar" />
        <fileset file="workspace/appWAR/appWAR.war" />
        <zipfileset file="workspace/appLIB/appLIB.jar"
                    prefix="APP-INF/lib" />
        <zipfileset dir="lib/fop" includes="*.jar" prefix="APP-INF/lib" />
        <zipfileset dir="lib/poi" includes="*.jar" prefix="APP-INF/lib" />
        <zipfileset dir="lib/gxt" includes="*.jar" prefix="APP-INF/lib" />          
        <metainf dir="workspace/appEAR/EarContent/META-INF">
            <exclude name="**/application.xml" />
            <exclude name="**/MANIFEST.MF" />
        </metainf>
        <manifest>
            <attribute name="Weblogic-Application-Version"
                       value="${deploy.revision}" />
        </manifest>
    </ear>


效果很好!我在理解文档时遇到了一些困难。虽然我收到了一个恼人的警告:“选定的ear文件包含META-INF/application.xml,该文件将被忽略(请使用ear任务的appxml属性)”恼人的警告可能是因为您的META-INF文件夹中也有application.xml,而ANT任务试图通过appxml=“blah blah”@ChssPly76插入application.xml。嗨,我可以生成ear,但它是空的!我知道我正在根据构建结果(文件夹构建)生成ear,但实际情况是,ear是在构建完成之前生成的!因此,当再次执行构建时,我得到了所需的ear(因为构建已经在第一次完成)。我如何配置build.xml,使其在构建完成后执行ear的生成?虽然这没有足够的升级投票,但我认为这比“已接受”答案更全面,因为它涵盖了所有变体—war、jar、appxml、manifest、app inf/lib和meta-inf。