Ant / Eclipse жалуется на артефакт: зависимости - PullRequest
8 голосов
/ 07 сентября 2011

Мне нужно использовать XML для JSON lib в моей войне.Я следовал учебнику , объясняющему, что в проекте требуются зависимости.

Но когда я добавляю следующее в мой муравей 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

Я установленmaven-ant jar в ant / lib и измените 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 существует в -D:\eclipse\plugins\org.apache.ant_1.8.2.v20110505-1300\lib

UPDATE 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 ]

13 голосов
/ 08 сентября 2011

Похоже, вы используете Maven Ant Tasks . Для этого вам понадобится копия баночки из области загрузки здесь . Как только (или если) вы получите это, вам нужно будет изменить свой сборочный файл, чтобы использовать его.

Основные вещи, которые необходимы , - определить пространство имен artifact и добавить typedef для ant-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" />
1 голос
/ 02 декабря 2016

У меня было то же сообщение об ошибке, но причина была в другом.

Переход к окну -> Настройки -> Ant -> Среда выполнения и настройка Ant Home решили мою проблему.

Так что для всех, кто вышеупомянутым решением не работает, проверьте, является ли "Ant Home"указывая в правильном направлении

...