2011-11-26 11 views
5

Soy algo nuevo en Java, y muy nuevo en maven. Podría usar algo de terminología de manera imperfecta.Compilación de un proyecto de maven con clase desde un archivo jar externo (que no está en un artefacto de maven)

Como desarrollo mi proyecto que estoy usando use maven para compilar, ya que he necesitado clases que no son parte del core java language he agregado una sección <dependency> apropiada a mi pom.xml (generalmente copiada de mvnbrowser.com sin que realmente lo entiendo muy bien), y he podido usar las clases que quiero. Funciona genial.

Ahora he encontrado una clase de Java que quiero usar que aparentemente no está disponible en un artefacto de experto. Es com.android.sdklib.build.ApkBuilder que se distribuye con el SDK de Android. Escribí un programa java independiente para que mi código funcionara; Lo compilo con javac y no con maven, y eso funciona bien. Para eso, puse el archivo jar que contiene la clase que quiero, sdklib.jar, en mi directorio jre/lib/ext (/usr/local/jdk1.6.0/jre/lib/ext en una máquina FreeBSD), y mi línea import com.android.sdklib.build.ApkBuilder compila bien y puedo consultar ApkBuilder y usarla sin problemas.

Ahora, cuando he copiado mi código de trabajo en mi proyecto Maven, y trató de construir con mvn project, me sale package com.android.sdklib.build does not exist errores en la línea de importación y cannot find symbol: class ApkBuilder errores cuando me refiero a ApkBuilder.

Buscando en la red, encontré android-maven-plugin aquí: http://code.google.com/p/maven-android-plugin/. Me refirió a maven-android-sdk-deployer aquí: https://github.com/mosabua/maven-android-sdk-deployer. Estas pistas sonaron prometedoras al principio, pero hasta donde puedo decir, su propósito es desarrollar aplicaciones de Android utilizando Maven, que no es lo que estoy tratando de hacer. Solo quiero que mi programa java manipule archivos Android apk, pero mi programa java no debe ejecutarse en un dispositivo Android. Además, el SDK de Android está diseñado para trabajar con Linux, no con FreeBSD que estoy usando, por lo que no puedo seguir las instrucciones de instalación para maven-android-sdk-deployer. También encontré un artefacto llamado maven-apkbuilder-plugin, pero también parece ser para crear aplicaciones de Android y no vi documentación para él. Así que no he seguido estos pasos.

Parece que lo más fácil sería obtener el compilador en mi carpeta jre/lib/ext para el archivo sdklib.jar al ejecutar mvn package. Pero tal vez ese no es el camino a seguir. O tal vez hay un cambio simple que puedo hacer en mi pom.xml que hará que el compilador encuentre sdklib.jar. Miré la documentación de pom al http://maven.apache.org/pom.html#Build_Settings, pero no vi una manera de hacerlo. De todos modos, estoy seguro de que hay al menos una solución; Simplemente no lo sé (todavía).

¿Cuáles son mis opciones? ¿Cuál es la mejor manera de usar la clase ApkBuilder en mi proyecto maven-built? ¿Qué debería haber leído que me hubiera permitido responder a esta pregunta yo mismo? ¡¡Gracias!!

+0

Usted ha identificado correctamente el origen del problema - el JAR faltante en el classpath. Forzar la alimentación del 'jre/lib/ext' no es ideal. Intenta investigar algunas herramientas de desarrollo de Maven + Android (no sé nada sobre el desarrollo de Android). M2e-Android (http://rgladwell.github.com/m2e-android/) parece intrigante. Afirma que "trae el poder de la administración de la dependencia de Maven al ADT" –

Respuesta

8

Si solo intenta hacer referencia al contenedor, la solución más simple podría ser agregar manualmente el contenedor al repositorio local. Vea here para más detalles.

cáscara de nuez:

mvn install:install-file  \ 
    -Dfile=<path-to-file>  \ 
    -DgroupId=<group-id>  \ 
    -DartifactId=<artifact-id> \ 
    -Dversion=<version>  \ 
    -Dpackaging=jar 

Usted puede uso lo que desea para el group-id, artifact-id y version, pero debe ser algo parecido a lo que cabría esperar si estaba disponible en el repositorio.

Dado que en realidad no está creando un proyecto de Android, esto puede ser suficiente.


Así es como habría hecho la pregunta.

¿Cómo puedo utilizar una biblioteca no disponible desde un repositorio Maven en mi compilación Maven?

(Coincidentemente, que las variaciones más cortas, y de que, en caso que aparezcan los enlaces que "debería" haber leído, para responder a su última pregunta :)

Cuestiones relacionadas