2011-09-07 16 views
8

Ho bisogno di usare XML per lib JSON nella mia guerra. Ho seguito uno tutorial spiegando che le dipendenze sono richieste nel progetto.Ant/Eclipse si lamenta di artefatti: dipendenze

Ma quando aggiungo quanto segue nella mia formica build.xml (il file utilizzato per creare la guerra), Eclipse si lamenta del artifact:dependencies, sembra che non gli piace il : .I hanno il seguente messaggio di errore:

Il prefisso artifact per l'elemento artifact:dependencies non è vincolata ...

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

Qualche idea?

UPDATE

Ho lo stesso problema cercando di definire un pom in-memory con:

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

Il prefisso artifact per l'elemento artifact:pom non è vincolata ...

UPDATE 2

Ho installato jar antispam in ant/lib e ho modificato il file build.xml in modo che contenga la definizione del materiale artefatto ma ho un messaggio di errore durante l'esecuzione.

<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> 
     ... 

Il messaggio di errore Eclipse ha dato è:

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 

Il vaso Maven-formica esiste in -D:\eclipse\plugins\org.apache.ant_1.8.2.v20110505-1300\lib

UPDATE 3

Questo è il file build.xml I sto usando.

<!-- 
<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> 

Si stava lavorando bene prima ho aggiunto tutte le cose dipendenze ... ancora non riesce a trovare la pb qui. Qualsiasi aiuto sarebbe molto gradito.

risposta

12

Sembra che tu stia facendo uso di Maven Ant Tasks. Per fare ciò avrai bisogno di una copia del barattolo dall'area di download here. Una volta (o se) hai capito, dovrai modificare il tuo file di build per usarlo.

Le principali cose che sono are needed per definire lo spazio dei nomi artifact, e aggiungere il typedef per la formica-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

grazie. Ho fatto ciò che mi consiglia ma ho ancora dei problemi. Ho aggiornato la domanda per aggiungere i dettagli. – Luc

+0

@Luc - molte scuse ritengo che il campione a cui ho fatto riferimento non sia affatto ideale. Ho aggiunto un collegamento al campione corretto e aggiornato l'XML di esempio sopra. Il bit mancante è il typedef. –

+0

Grazie per aver menzionato questo namescape. In qualche modo l'ho perso. – stevebot

0

ho avuto lo stesso messaggio di errore, ma la causa era diverso.

Andando alla finestra -> Preferenze -> Ant -> Runtime e impostazione Ant Home ha risolto il mio problema.

Quindi per chiunque quella soluzione di cui sopra non funziona, controllare se "Ant Home" sta puntando verso la giusta direzione

Problemi correlati