build.xml javac抱怨在编译期间从javax.servlet.http中缺少类

时间:2013-09-11 08:10:34

标签: java xml tomcat netbeans ant

我为netbeans项目编写了build.xml更新时间为8:49 PM )。我发现serlvet-api.jar等tomcat库位于C:\apache-tomcat-7.0.35\lib目录中。但我不确定我是如何将target="class_compile"使用fieldset dir连接到tomcat目录(每次我希望从另一台计算机编译时都不更改build.xml)。

我已阅读问题error while including external JARs in ant script,解决方案是classpathref元素中缺少的javac属性(尽管我的classpathref属性似乎是正确的)。

<path id="build.classpath">
    <fileset dir="${lib.dir}">
        <include name="**/*.jar"/>
    </fileset>
</path>

<target name="class_compile" depends="prepare" description="Compile the whole project">
    <javac destdir="${build.classes}" 
            debug="${debug}" 
            deprecation="on"
            optimize="off"
            srcdir="${src.dir}"
            classpathref="build.classpath"
            includes="*/**"
    />
    <copy todir="${build.classes}">
        <fileset dir="${src.dir}" includes="**/*.properties"/>
    </copy>
</target>

<target name="prepare">
    <mkdir dir="${build.dir}"/>
    <mkdir dir="${build.classes}"/>
    <path id="run.classpath" >
        <pathelement location="${build.classes}" />
    </path>
    <mkdir dir="${build.lib}"/>
    <mkdir dir="${qa.dir}"/>
</target>

目前,执行class_compile目标后,会报告有关丢失类文件的多个错误。

emma:
Created dir: C:\capstonegroup3\TTTserver\build\emma-instr
Created dir: C:\capstonegroup3\TTTserver\build\emma-reports
prepare:
Created dir: C:\capstonegroup3\TTTserver\build\classes
Created dir: C:\capstonegroup3\TTTserver\build\lib
Created dir: C:\capstonegroup3\TTTserver\build\qa-reports
class_compile:
C:\capstonegroup3\TTTserver\build.xml:152: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds
Compiling 21 source files to C:\capstonegroup3\TTTserver\build\classes
C:\capstonegroup3\TTTserver\src\java\AuthServer\AuthenticationInterface.java:8: error: package javax.servlet.http does not exist
import javax.servlet.http.HttpServletRequest;

有没有办法将property设置为tomcat apache/lib目录,从persay a .property文件开始?我在build_impl.xml中看到了(由netbeans生成,在-init-private目标中包含了属性文件)。

<target depends="-pre-init" name="-init-private">
    <property file="nbproject/private/private.properties"/>
</target>

但我不确定如何获取build.xml的这些属性的访问权限。但基本上我正在寻找一个生成apache-tomcat\lib目录的相对路径的解决方案,并成功编译类文件而不会丢失包。

2 个答案:

答案 0 :(得分:2)

我喜欢做的是在项目文件夹的父文件夹中保留一个描述我的本地环境的local.properties文件(例如,在NetBeansProjects下),例如:

NetBeansProjects
+- local.properties
+- MyProject
   +- build.xml
   +- <other stuff>

build.xml就像:

tomcat.home=/C:/java/tomcat
gwt.dir=/C:/java/google/gwt-2.5.1

此文件不受版本控制,允许每个开发人员配置他/她自己的环境。 Ant使用以下内容读取它:

<property file="../local.properties" />

并使用例如as(这只是一个例子,调整正确用法):

<path id="project.classpath">
    <pathelement path="war/WEB-INF/classes" />
    <fileset dir="war/WEB-INF/lib">
        <include name="*.jar" />
    </fileset>
    <fileset dir="${tomcat.home}/lib"><!-- tomcat.home defined in local.properties -->
        <include name="**/*.jar" />
    </fileset>
</path>

答案 1 :(得分:2)

您应该将servlet-api.jar文件声明为build.classpath,如下所示

<path id="build.classpath">
    <fileset dir="C:/apache-tomcat-7.0.35/lib">
        <include name="servlet-api.jar" />
    </fileset>
    <fileset dir="${lib.dir}">
        <include name="**/*.jar"/>
    </fileset>
</path>