2011-09-07 119 views
8

我需要在我的战争中使用XML到JSON库。 我跟着tutorial解释项目中需要依赖关系。Ant/Eclipse抱怨工件:依赖关系

但是,当我加入我的蚂蚁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> 

任何想法?

UPDATE

我有同样的问题试图定义一个内存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不绑定...

UPDATE 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的蚂蚁罐子并在-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。任何帮助将是非常受欢迎的。

回答

12

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

主要的事情,are needed是定义artifact命名空间,并添加的typedef蚂蚁-lib目录下:

<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" /> 
+0

谢谢。我已经完成了你的建议,但我仍然有一些问题。我已经更新了这个问题来添加细节。 – Luc

+0

@Luc - 很多道歉我认为我引用的样本并不是理想的。我已经添加了正确示例的链接,并更新了上面的示例XML。缺少的位是typedef。 –

+0

感谢您提及定义namescape。不知怎的,错过了。 – stevebot

0

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

去窗口 - >首选项 - > Ant - >运行时并设置Ant Home解决了我的问题。

因此,对于以上解决方案无法正常工作的任何人,请检查“Ant Home”是否指向正确的方向