Ant / Eclipse抱怨工件:依赖

时间:2011-09-07 14:42:01

标签: eclipse ant dependencies

我需要在战争中使用XML到JSON lib。 我跟着tutorial解释了项目中需要依赖项。

但是当我在我的蚂蚁build.xml(用于创建战争的文件)中添加以下内容时,Eclipse会抱怨artifact:dependencies,似乎它不喜欢:。我有以下错误消息:

  

元素artifact的前缀artifact:dependencies未绑定...

<artifact:dependencies filesetId="dependency.fileset"
    sourcesFilesetId="sources.dependency.fileset"
    javadocFilesetId="javadoc.dependency.fileset"
    versionsId="dependency.versions">
    <!-- DEPENCIES GO HERE -->
</artifact:dependencies>

有什么想法吗?

更新

我在尝试使用以下内容定义内存中的pom时遇到同样的问题:

<artifact:pom id="mypom" groupId="org.acme" artifactId="project1" version="1.0">
   <dependency groupId="junit" artifactId="junit" version="4.1"/>
   <dependency groupId="org.codehaus.plexus" artifactId="plexus-utils" version="1.5.5"/>
   <license name="apache" url="http://www.apache.org"/>
</artifact:pom>
  

元素artifact的前缀artifact:pom未绑定...

更新2

我在ant / lib中安装了maven-ant jar并更改了build.xml,因此它包含了工件的定义,但运行时出现错误信息。

<project name="test" default="install" xmlns:artifact="antlib:org.apache.maven.artifact.ant">

<artifact:dependencies pathId="dependency.classpath">
   <dependency>
        <groupId>net.sf.json-lib</groupId>
        <artifactId>json-lib</artifactId>
        <version>2.3</version>
        <type>jar</type>
        <classifier>jdk15</classifier>
        <scope>compile</scope>
       </dependency>
       ...

Eclipse提供的错误消息是:

BUILD FAILED
D:\J2EE\workspace\Test\build.xml:3: Problem: failed to create task or type antlib:org.apache.maven.artifact.ant:dependencies
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.
No types or tasks have been defined in this namespace yet
This appears to be an antlib declaration. 
    Action: Check that the implementing library exists in one of:
    -D:\eclipse\plugins\org.apache.ant_1.8.2.v20110505-1300\lib
    -C:\Documents and Settings\luc\.ant\lib
    -a directory added on the command line with the -lib argument

maven-ant jar确实存在于-D:\eclipse\plugins\org.apache.ant_1.8.2.v20110505-1300\lib

更新3

这是我正在使用的build.xml文件。

<!--
<project name="Monitoring" default="install" xmlns:artifact="urn:maven-artifact-ant" xmlns:test="urn:test-tasks">
-->
<project name="Monitoring" default="install" xmlns:artifact="antlib:org.apache.maven.artifact.ant">

<!-- project-specific variables -->
<property environment="env" />
<property name="project_home" value="D:\J2EE\workspace\Monitoring"/>
<property name="webapp.dir" value="${project_home}/target" />
<property name="jboss.dir" value="D:\J2EE\jboss\standalone\deployments" />  
<property name="package.name" value="monitoring.war" />
<property name="lib.dir" value="${project_home}/lib" />
<property name="src.dir" value="${project_home}/src" />
<property name="resources.dir" value="${project_home}/resources" />
<property name="dest.dir" value="${project_home}/target" />
<property name="package.file" value="${dest.dir}/${package.name}" />

<!-- put everything in a temp folder with the right structure during the build -->
<property name="temp.dir" value="${project_home}/temp" />
<property name="temp.dir.web-inf" value="${temp.dir}/WEB-INF" />
<property name="temp.dir.lib" value="${temp.dir.web-inf}/lib" />
<property name="temp.dir.classes" value="${temp.dir.web-inf}/classes" />
<property name="temp.dir.meta-inf" value="${temp.dir}/META-INF" />


<path id="build.class.path">
    <fileset dir="${env.JAVA_HOME}/lib">
        <include name="**/*.jar" />
    </fileset>
    <fileset dir="D:\ant\lib">
            <include name="**/*.jar" />
    </fileset>
</path>

<target name="deps">
    <artifact:dependencies pathId="dependency.classpath">
        <dependency>
            <groupId>net.sf.json-lib</groupId>
            <artifactId>json-lib</artifactId>
            <version>2.3</version>
            <type>jar</type>
            <classifier>jdk15</classifier>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-io</artifactId>
            <version>1.3.2</version>
            <type>jar</type>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>xom</groupId>
            <artifactId>xom</artifactId>
            <version>1.1</version>
        </dependency>
    </artifact:dependencies>
</target>

<target name="clean" depends="deps">
    <delete>
        <fileset dir="${dest.dir}" includes="**/*"/>
    </delete>
    <delete dir="${temp.dir}" />
    <delete dir="${temp.dir.classes}" />
    <delete dir="${temp.dir.meta-inf}" />
    <delete dir="${temp.dir.web-inf}" />
</target>

<target name="prepare" depends="clean">
    <mkdir dir="${dest.dir}" />
    <mkdir dir="${temp.dir}" />
    <mkdir dir="${temp.dir.lib}" />
    <mkdir dir="${temp.dir.meta-inf}" />
    <mkdir dir="${temp.dir.web-inf}" />
    <mkdir dir="${temp.dir.classes}" />
</target>

<!-- COMPILE -->
<target name="compile" depends="prepare">
    <echo>=== COMPILE ===</echo>
    <echo>Compiling ${src.dir} files ...</echo>
    <javac debug="on" srcdir="${src.dir}" destdir="${temp.dir.classes}" includes="**/*" includeantruntime="false">
        <classpath refid="build.class.path" />
        <classpath refid="dependency.classpath" />
    </javac>
</target>

<!-- PACKAGE -->
<target name="package" depends="compile">
  <echo>=== PACKAGE ===</echo>

  <!-- copy the config files -->
  <copy file="${resources.dir}/web.xml" tofile="${temp.dir.web-inf}/web.xml" overwrite="true" />
  <copy file="${resources.dir}/manifest.mf" tofile="${temp.dir.meta-inf}/manifest.mf" overwrite="true" />
  <copy todir="${temp.dir.classes}">
    <fileset dir="${src.dir}">
      <include name="**/*.xml"/>
      <include name="**/*.xsl"/>
    </fileset>
  </copy>

  <!-- the ant war task. with all resources in place, create the war file -->
  <war destfile="${package.file}" webxml="${temp.dir.web-inf}/web.xml" basedir="${temp.dir}">
    <lib dir="${lib.dir}" />
    <classes dir="${temp.dir.classes}" />
  </war>
</target>

<!-- INSTALL -->
<target name="install" depends="package">
  <echo>=== INSTALL ===</echo>
  <copy file="${package.file}" tofile="${webapp.dir}/${package.name}" overwrite="true" />
  <copy file="${package.file}" tofile="${jboss.dir}/${package.name}" overwrite="true" />        
</target>

</project>

在我添加所有依赖项之前它运行良好...仍然无法在这里找到pb。任何帮助都会非常受欢迎。

2 个答案:

答案 0 :(得分:13)

看起来你正在使用Maven Ant Tasks。为此,您需要从下载区域here获取jar的副本。 一旦(或者​​如果)你得到它,你将需要修改你的构建文件来使用它。

are needed定义artifact命名空间的主要内容,并为ant-lib添加typedef:

<project name="foo" default="foo" xmlns:artifact="antlib:org.apache.maven.artifact.ant">

  <path id="maven-ant-tasks.classpath" path="lib/maven-ant-tasks-2.1.3.jar" />
  <typedef resource="org/apache/maven/artifact/ant/antlib.xml"
       uri="antlib:org.apache.maven.artifact.ant"
       classpathref="maven-ant-tasks.classpath" />

答案 1 :(得分:1)

我有相同的错误消息,但原因不同。

去窗口 - &gt;偏好 - &gt;蚂蚁 - &gt;运行时和设置Ant Home解决了我的问题。

因此,对于上述解决方案无效的任何人,请检查&#34; Ant Home&#34;指向正确的方向