【问题标题】:Ant / Eclipse complains about artifact:dependenciesAnt / Eclipse 抱怨 artifact:dependencies
【发布时间】:2011-11-12 05:51:25
【问题描述】:

我需要在我的战争中使用 XML 到 JSON 库。 我关注了tutorial,解释了项目中需要依赖项。

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

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

<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:pom的前缀artifact未绑定...

更新 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。非常欢迎任何帮助。

【问题讨论】:

    标签: eclipse ant dependencies


    【解决方案1】:

    我收到了同样的错误信息,但原因不同。

    Going to Window -> Preferences -> Ant -> Runtime 并设置 Ant Home 解决了我的问题。

    所以对于上述解决方案不起作用的任何人,请检查“Ant Home”是否指向正确的方向

    【讨论】:

      【解决方案2】:

      您似乎正在使用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" />
      

      【讨论】:

      • 谢谢。我已经按照你的建议做了,但我仍然有一些问题。我已更新问题以添加详细信息。
      • @Luc - 很抱歉,我认为我引用的样本无论如何都不理想。我添加了指向正确示例的链接并更新了上面的示例 XML。缺少的位是 typedef。
      • 感谢您提及定义该名称景观。不知何故错过了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多