【问题标题】:creating war file from eclipse web project从 Eclipse Web 项目创建战争文件
【发布时间】:2013-08-15 19:15:32
【问题描述】:

我一直在调整this suggested code 用于制作war文件,并创建了上图所示的BuildWar.xml文件的以下内容:

<?xml version="1.0" encoding="UTF-8"?>

<project name="myproject" default="default">
    <target name="default" depends="setup,compile,buildwar,deploy"></target>

    <target name="setup">
        <mkdir dir="dist" />
        <echo>Copying web into dist</echo>
        <copydir dest="dist/web" src="web" />
        <copydir dest="dist/web/WEB-INF/lib" src="${basedir}/../web/WEB-INF/lib" />
    </target>

    <target name="compile">
        <delete dir="${dist.dir}/web/WEB-INF/classes" />
        <mkdir dir="${dist.dir}/web/WEB-INF/classes" />
        <javac destdir="${dist.dir}/web/WEB-INF/classes" srcdir="src">
            <classpath>
                <fileset dir="${basedir}/myapp/web/WEB-INF/lib">
                    <include name="*" />
                </fileset>
            </classpath>
        </javac>
        <copy todir="${dist.dir}/web/WEB-INF/classes">
            <fileset dir="src">
                <include name="**/*.properties" />
                <include name="**/*.xml" />
            </fileset>
        </copy>
    </target>

    <target name="buildwar">
        <war basedir="${basedir}/dist/web" destfile="My.war"
             webxml="${basedir}/dist/web/WEB-INF/web.xml">
            <exclude name="WEB-INF/**" />
            <webinf dir="${basedir}/dist/web/WEB-INF/">
                <include name="**/*.jar" />
            </webinf>
        </war>
    </target>

    <target name="deploy">
        <copy file="My.war" todir="${tomcat.deploydir}" />
    </target>

</project>

在eclipse中将上述代码作为ant buildfile运行会产生一些copydir已被弃用的警告,并且还会产生以下错误消息:

BUILD FAILED
C:\mypath\myapp\BuildWar.xml:10: srcdir C:\mypath\web\WEB-INF\lib does not exist!

但是,当我将第 10 行中的 .. 替换为 myapp 时,我收到一条错误消息,指出

BUILD FAILED
C:\mypath\myapp\BuildWar.xml:10: srcdir C:\mypath\myapp\myapp\web\WEB-INF\lib does not exist!

如何修复代码以使其不再提供 BUILD FAILED 消息?

【问题讨论】:

  • 首先你能指定myapp项目文件夹在文件系统中的位置吗?我看到您正在使用 myapp/myapp 路径(您在上一条失败的消息中使用了 3 次)
  • 我没有看到 'basedir' 的声明,并且为了构建一个 war 文件用户,目标名称 = war
  • 您似乎缺少有关如何运行 java 和编译文件的重要信息。 a) 你的JAVA_HOME 变量应该指向C:\mypath\Java\jdk1.7.0_17。您还应该找到PATH 变量并添加C:\mypath\Java\jdk1.7.0_17\bin。如果一切设置正确并且您从命令行运行java -version,您应该会看到java version 1.7.0_17 b) 然后转到Eclipse Windows-&gt;Preferences-&gt;Java-&gt;Installed JREs 并添加一个指向上面那个JDK 的新运行时,如果它不存在的话。如果是,只需选择它作为默认值。然后确保您的项目使用该 JDK
  • 找不到您的班级myapp.web.HomeServlet。如果这应该转到WEB-INF/classes,那么 ant 脚本就没有完成它的工作。战争文件实际上是一个 zip 文件。将其解压缩到某个地方并检查所有类和 jar 是否存在于它们应该存在的位置。与您的网络文件夹进行比较。然后检查 ant 脚本为什么它没有复制丢失的项目

标签: java eclipse tomcat servlets ant


【解决方案1】:

我觉得行:

应该是:

${basedir} 指的是 C:\mypath\myapp,如果这是运行 Ant 的地方(或 BuildWar.xml 所在的地方)

【讨论】:

  • C:\Program Files\Java\jre7是Java运行环境,即运行Java代码就足够了;但是要编译 Java 代码,您需要一个 JDK。如果您安装了一个,请将 JAVA_HOME 设置为指向 JDK 而不是 JRE;否则访问 java.oracle.com 并下载/安装一个。
【解决方案2】:

在顶部声明它作为项目标签的属性。

<?xml version="1.0" encoding="UTF-8"?>

<project basedir="C:\......." name="myproject" default="default">
<target name="default" depends="setup,compile,buildwar,deploy"></target>

<target name="setup">
    <mkdir dir="dist" />
    <echo>Copying web into dist</echo>
    <copydir dest="dist/web" src="web" />
    <copydir dest="dist/web/WEB-INF/lib" src="${basedir}/../web/WEB-INF/lib" />
</target>

<target name="compile">
    <delete dir="${dist.dir}/web/WEB-INF/classes" />
    <mkdir dir="${dist.dir}/web/WEB-INF/classes" />
    <javac destdir="${dist.dir}/web/WEB-INF/classes" srcdir="src">
        <classpath>
            <fileset dir="${basedir}/myapp/web/WEB-INF/lib">
                <include name="*" />
            </fileset>
        </classpath>
    </javac>
    <copy todir="${dist.dir}/web/WEB-INF/classes">
        <fileset dir="src">
            <include name="**/*.properties" />
            <include name="**/*.xml" />
        </fileset>
    </copy>
</target>

<target name="buildwar">
    <war basedir="${basedir}/dist/web" destfile="My.war"
         webxml="${basedir}/dist/web/WEB-INF/web.xml">
        <exclude name="WEB-INF/**" />
        <webinf dir="${basedir}/dist/web/WEB-INF/">
            <include name="**/*.jar" />
        </webinf>
    </war>
</target>

<target name="deploy">
    <copy file="My.war" todir="${tomcat.deploydir}" />
</target>

</project>

声明基本目录后,写入所有相对于 basedir 的路径。

【讨论】:

  • 要设置 Java_Home 环境变量,请参考此链接。它很容易。 computerhope.com/issues/ch000549.htm
猜你喜欢
  • 2015-02-23
  • 2013-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-03
  • 1970-01-01
  • 2015-09-19
相关资源
最近更新 更多