2011-01-11 20 views
6

Al final de mi hormiga ID de build como que para llamar al equivalente de la llamada línea de comandosUsando tarea ant Maven para instalar frasco para repositorio local

mvn install:install-file -Dfile=my.jar -DgroupId=com.company.project -DartifactId=my_project -Dversion=1.0 -Dpackaging=jar -DgeneratePom=true 

para que se añada el tarro de nueva construcción a una repositorio maven en el que se basará otro proyecto.

He intentado usar el maven-ant-task y haber añadido el frasco experto-ant-tarea al proyecto de hormigas construido y el código siguiente a la build.xml:

<target name ="minstall" depends="jar"> 
    <artifact:pom id="maven_install" file="maven_install.xml" /> 
    <artifact:install file="${out.dir}/my_project.jar"> 
     <pom refid="maven_install"/> 
    </artifact:install> 
</target> 

pero parece que falta algo, ya que suele trabaja para mi. Para empezar, aparece el error en el build.xml (archivo de construcción ant) ​​que dice

El prefijo "artefacto" para el elemento "artefacto: pom" no está vinculado.

¿Qué estoy haciendo mal. Soy bastante nuevo para la hormiga?

En una pregunta real ¿cuál es el propósito del archivo POM asociado? Normalmente no tendria un POM en este proyecto ya que es una compilación

Respuesta

-2

Creo que no tiene sentido poner tales comandos en build.xml de Ant. Si desea tener su archivo jar instalado en su repositorio maven, simplemente use el comando mvn install.

Además de eso, supongo que de alguna manera está confundiendo el propósito de las herramientas de Maven y Ant en su proyecto. Lo que sugeriría es usar Maven como su principal herramienta de compilación. Puede configurar la invocación de objetivos Ant en su archivo POM si realmente lo necesita. Personalmente, creo que es la mejor solución para que Ant llame a Maven. Los objetivos de Maven (como limpiar, probar, empaquetar, instalar, etc.) son muy simples de usar y potentes (supongo que puedes leerlos en cada tutorial de Maven).

+4

Baran. Tal vez su proyecto está usando hormiga y un proyecto diferente usa maven. – Raghuram

+0

eso es correcto Raghuram Tengo una serie de nuevos proyectos usando maven y una serie de antiguos proyectos heredados que usan hormiga. Estos proyectos heredados deben tener sus jarrones añadidos al repositorio local de maven después de cada construcción. Intenté tener una compilación build.xml llamada por maven, pero esto no funcionó de manera confiable. Mientras llamaba a la hormiga build.xml con éxito, rápidamente creaba excepciones durante la construcción de la hormiga (la construcción de la hormiga funciona bien solo con la hormiga). Parece que tener maven call ant es diferente a tener hormiga llamada por sí misma. Algunas propiedades están siendo aprobadas por la instancia maven que no solicité. –

+0

Aunque a id aún le gusta resolver esto, he trabajado en ello por el momento llamando a un script por lotes desde el archivo de compilación the ant mediante el comando exec. este script invoca el comando mvn install para instalar archivos jar en el repositorio local. –

3

Quizás maven-ant-task jar no es instalado, es decir, no en su hormiga CLASSPATH. Puede seguir this instruction para esto.

+0

he agregado el contenedor de tareas de la hormiga maven a ant lib dir, agregué el directorio al classpath de windows y también agregué el código (http://maven.apache.org/ant-tasks/installation.html) a un pom local archivo según las instrucciones. Todavía no hay alegría –

+0

¿Puede volver a verificar si su build.xml tiene el espacio de nombres xml Raghuram

+0

Raghuram tiene razón esto está relacionado con maven-ant -tarea. Ver http://stackoverflow.com/questions/1490914/how-to-get-project-version-from-mavenss-pom-in-ant –

1

Ese mensaje significa que le falta un atributo xmlns: artefacto en su build.xml. Eche un vistazo a installation page en los documentos para ver un ejemplo.

En cuanto al propósito del archivo POM, se trata principalmente de metadatos para que Maven pueda encontrar las dependencias correctamente. En una construcción maven real también describe cómo construir, probar y empaquetar. Pero en su caso todo lo que hace es hormiga en su lugar.

3

Como se mencionó anteriormente, debe asegurarse de que las tareas estén definidas en su script ant y se entienda el espacio de nombres del artefacto.

El archivo POM se usa (en este caso) para indicar a los repositorios Maven las dependencias del JAR que está colocando en el repositorio. El POM también debe especificar la información de identificación del JAR (groupId, artifactId, número de versión, licencia, etc.).

En sentido estricto, no es necesario un POM externa, se podría definir la información en el archivo build.xml de la siguiente manera:

<!-- Assuming tasks defined, and 'artifact' namespace exists --> 
<artifact:pom id="maven_install" groupId="com.whatever" artifactId="some-jar" 
       version="1.0" packaging="jar"> 
    <dependency groupId="..." artifactId="..." version="..."/> 
    <dependency groupId="..." artifactId="..." version="..."/> 
    <license name="apache" url="http://www.apache.org"/> <!-- can be omitted --> 
</artifact:pom> 

<target name ="minstall" depends="jar"> 
    <artifact:install file="${out.dir}/my_project.jar" pomRefId="maven_install"/> 
</target> 

Al instalar el archivo JAR en la tarea 'minstall', el POM debe generarse con las dependencias apropiadas en el repositorio local.

+4

Actualmente hay un error en la tarea de instalación anterior si utiliza un POM en memoria archivo. El artefacto se instalará como 'super-pom', no como el artefacto que especificó. Los desarrolladores de Maven están trabajando en esto. (Mencionado en la pregunta http://stackoverflow.com/questions/4887018/artifactinstall-pushes-the-super-pom-instead-of-the-pom-i-define) – GKelly

Cuestiones relacionadas