Ant构建文件中的类路径

时间:2012-07-23 18:15:50

标签: xml ant

我正在尝试为我的JBoss AS 7项目制作一个Ant构建文件。构建文件应该将我的项目构建到EAR中。我得到了以下错误,所以我认为类路径被忽略了(如果我错了请纠正我。)

C:\workspace\LearningAS7\GrahamsProj\build-handmade.xml:21: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds
Compiling 4 source files to C:\workspace\LearningAS7\GrahamsProj\build

C:\workspace\LearningAS7\GrahamsProj\src\grahamsproj\entity\Schemas.java:4: package javax.persistence does not exist
import javax.persistence.*;

C:\workspace\LearningAS7\GrahamsProj\src\grahamsproj\entity\Schemas.java:10: cannot find symbol
symbol: class Entity
@Entity

C:\workspace\LearningAS7\GrahamsProj\src\grahamsproj\entity\Schemas.java:11: cannot find symbol
symbol: class Table
@Table(name="schemas")

C:\workspace\LearningAS7\GrahamsProj\src\grahamsproj\entity\Schemas.java:12: cannot find symbol
symbol: class SequenceGenerator
@SequenceGenerator(name="seq_schemas", sequenceName = "")

C:\workspace\LearningAS7\GrahamsProj\src\grahamsproj\session\delegate\GrahamsProjBean.java:7: package javax.ejb does not exist
import javax.ejb.Stateless;

C:\workspace\LearningAS7\GrahamsProj\src\grahamsproj\session\delegate\GrahamsProjBean.java:8: package javax.persistence does not exist
import javax.persistence.EntityManager;

C:\workspace\LearningAS7\GrahamsProj\src\grahamsproj\session\delegate\GrahamsProjBean.java:9: package javax.persistence does not exist
import javax.persistence.PersistenceContext;

C:\workspace\LearningAS7\GrahamsProj\src\grahamsproj\session\interfaces\GrahamsProjBeanLocal.java:3: package javax.ejb does not exist
import javax.ejb.Local;

C:\workspace\LearningAS7\GrahamsProj\src\grahamsproj\session\interfaces\GrahamsProjBeanLocal.java:8: cannot find symbol
symbol: class Local
@Local

C:\workspace\LearningAS7\GrahamsProj\src\grahamsproj\session\interfaces\GrahamsProjBeanRemote.java:3: package javax.ejb does not exist
import javax.ejb.Remote;

C:\workspace\LearningAS7\GrahamsProj\src\grahamsproj\session\interfaces\GrahamsProjBeanRemote.java:8: cannot find symbol
symbol: class Remote
@Remote

C:\workspace\LearningAS7\GrahamsProj\src\grahamsproj\session\delegate\GrahamsProjBean.java:15: cannot find symbol
symbol: class Stateless
@Stateless

C:\workspace\LearningAS7\GrahamsProj\src\grahamsproj\session\delegate\GrahamsProjBean.java:18: cannot find symbol
symbol  : class EntityManager
location: class grahamsproj.session.delegate.GrahamsProjBean
EntityManager em;

C:\workspace\LearningAS7\GrahamsProj\src\grahamsproj\entity\Schemas.java:52: cannot find symbol
symbol  : class Id
location: class grahamsproj.entity.Schemas
@Id

C:\workspace\LearningAS7\GrahamsProj\src\grahamsproj\entity\Schemas.java:53: cannot find symbol
symbol  : class Column
location: class grahamsproj.entity.Schemas
@Column(name = "ID")

C:\workspace\LearningAS7\GrahamsProj\src\grahamsproj\entity\Schemas.java:54: cannot find symbol
symbol  : class GeneratedValue
location: class grahamsproj.entity.Schemas
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seq_schemas")

C:\workspace\LearningAS7\GrahamsProj\src\grahamsproj\session\delegate\GrahamsProjBean.java:17: cannot find symbol
symbol  : class PersistenceContext
location: class grahamsproj.session.delegate.GrahamsProjBean
@PersistenceContext

17 errors
C:\workspace\LearningAS7\GrahamsProj\build-handmade.xml:21: Compile failed; see the compiler error output for details.
BUILD FAILED (total time: 0 seconds)

所以现在我的构建文件看起来像这样:http://pastebin.com/NZWmQEjN(在这里发布的时间太长了)。如你所见,我放入了一个类路径部分。但现在我收到了这个错误:

C:\workspace\LearningAS7\GrahamsProj\build-handmade.xml:11: Problem: failed to create task or type classpath
Cause: The name is undefined.
Action: Check the spelling.
Action: Check that any custom tasks/types have been declared.
Action: Check that any <presetdef>/<macrodef> declarations have taken place.

任何人都可以看到我的构建文件有什么问题吗?

1 个答案:

答案 0 :(得分:4)

你有:

<classpath>
     <pathelement path="${classpath}"/>
      <fileset dir="lib">
           <include name="**/*.jar"/>
       </fileset>
       <pathelement location="classes"/>
       <dirset dir="${build.dir}">
           <include name="apps/**/classes"/>
           <exclude name="apps/**/*Test*"/>
       </dirset>
       <filelist refid="third-party_jars"/>
  </classpath>

但是,你不能简单地将<classpath>抛弃其寂寞的自我。

您正在做的是创建一个 PATH ,可以在其他地方用作 CLASSPATH 。你可能想要:

<path id="class.path">
     <pathelement path="${classpath}"/>
      <fileset dir="lib">
          <include name="**/*.jar"/>
      </fileset>
      <pathelement location="classes"/>
      <dirset dir="${build.dir}">
          <include name="apps/**/classes"/>
          <exclude name="apps/**/*Test*"/>
      </dirset>
      <filelist refid="third-party_jars"/>
</path>

现在,当您需要指定类路径时,可以使用 PATH

   <javac srcdir="${src}"
        destdir="${build}"
        classpathref="class.path"/>

或者...

   <javac srcdir="${src}
        destdir="${build}">
        <classpath>
            <path refid="class.path"/>
        </classpath>
   </javac>

最后一个允许你根据需要添加多个类路径,有些人更喜欢它,因为它可以在需要时更容易更改类路径。