2008-11-28 26 views
43

Uso Eclipse (3.4) y mi clase compila sin advertencia ni errores. Mi proyecto utiliza un archivo jar externo.¿Dónde colocar los frascos externos?

¿Dónde debo colocar este archivo jar externo para no obtener un java.lang.NoClassDefFoundError al usar esta clase desde otro proyecto (no en Eclipse)?

Podría simplemente extraer el jar en la carpeta del proyecto, pero eso no se siente bien.

Editar: esta pregunta no se trata de importar tarros en Eclipse, sino de usarlos fuera de Eclipse.

Respuesta

54

Si desea incluir un archivo JAR en su proyecto Eclipse, generalmente debe crear una carpeta 'lib' dentro de la carpeta del proyecto y colocar el archivo allí. Luego necesita decirle a eclipse que lo incluya en la ruta de su clase para que su código se compile y se ejecute dentro de Eclipse.

de hacerlo:
- Id a las propiedades de su proyecto
- Seleccione 'Java Build Path' en la mano izquierda la columna
- Seleccione la pestaña 'Bibliotecas' en la parte central de la ventana
- Haga clic en el botón Agregar JAR - esto le dará una lista de sus proyectos en eclipse - expanda su proyecto y en la carpeta lib - su jar estará allí.
- Seleccione el JAR, haga clic en Aceptar y nuevamente en la ventana de propiedades.

Su código ahora se compilará y ejecutará.

+2

El código se compila dentro de eclipse. Cuando lo ejecuta fuera del eclipse (es decir, otra GUI llama a una función dentro del contenedor) obtengo el NoClassDefFoundError. – Burkhard

+1

O bien, puede hacer clic con el botón derecho en el contenedor y hacer clic en BuildPath-> Add to Build Path. –

+0

Cuando ejecuta lo que está fuera del eclipse, debe proporcionar los binarios del proyecto eclipse (si no están integrados en un contenedor) en el classpath de lo que sea que esté ejecutando. –

7

No importa demasiado dónde lo coloque, pero necesita configurar su otro proyecto que no sea Eclipse para colocar los archivos jar externos en su classpath, o use el mecanismo de directorio de extensiones, si es necesario. (Eso es más fácil, pero hacerlo explícito es posiblemente mejor.)

+0

El proyecto que no es Eclipse no está configurado ni mantenido por mí. De hecho, acabo de escribir algunas clases y una de estas clases usa otra clase de un archivo jar. – Burkhard

+0

Entonces, ¿no puede configurar el otro proyecto * en absoluto * en términos de classpath? Tarde o temprano, eso te morderá. En lugar de evitar esa restricción, intente solucionarlo. –

0

Lo coloco en una nueva carpeta. Esta carpeta debe incluirse en la ruta de compilación. No importa si está en Eclipse o afuera. Eclipse tiene una ruta de compilación específica para el proyecto y pasa esta ruta al javac. Si desea ejecutar javac fuera de Eclipse, debe pasar la ruta de compilación manualmente.

1

Solo tiene que hacer referencia a ella utilizando una opción -classpath, en una carpeta que no está incluida en un espacio de trabajo de eclipse, es decir, que no depende del eclipse en absoluto.

advertencia, cannoy ejecutar su otro proyecto con java -jar si hace referencia a su frasco externo con -cp opción (see this question)

19

ponerlo en su carpeta jre/lib/ext

todo lo dicho sobre la ruta de clase es cierto, pero esto es un lugar consistente y sensato para vivir.

Puede encontrar su carpeta jre mirando la variable de entorno JAVA_HOME en Windows.

+0

Interesante, pero tengo tres JRE y tres JDK en mi computadora, no me veo duplicando también todas las bibliotecas que necesito. – PhiLho

+1

puede tener tres (yo también), pero solo usa uno en cualquier momento, que está definido por su JAVA_HOME. Además, su herramienta de terceros puede tener diferentes versiones para diferentes JRE, por lo que tiene la inversa del problema de duplicación si no toma este enfoque. Es para lo que es jre/lib/ext. – Simon

+0

En resumen, lo suficientemente útil. – asifaftab87

0

Sé que esto no es exactamente lo que está preguntando, pero ¿ha considerado utilizar Maven? Algunos de los complementos como el ensamblaje pueden ser útiles en situaciones como estas.

0

Ten una jarra dentro de Eclipse, como James Camfield ha escrito.

Luego, cuando compile (Ant, Maven, manualmente) para su distribución, asegúrese de que el archivo jar esté incluido con o dentro de su jar de aplicación o war o ear o cualquier archivo, y que cualquier script de inicio lo incluya en el classpath usando -classpath opción de línea de comando para java, como VonC ha escrito.

No se preocupe por pegar los frascos en la carpeta de extensiones java, todo lo que hará es olvidarse de él cuando se trata de enviar su código a un tercero para usarlo, porque no lo tendrán configurado hasta su final.

0

Crea un directorio lib compartido y coloca este jar, y cualquier otro archivo jar común que puedas tener allí. Si está utilizando Maven, entonces ya lo tiene en la forma del repositorio local.

En Eclipse, cree una variable classpath para este directorio y luego úsela para hacer referencia a su archivo jar en sus proyectos. Si tiene varios proyectos que cumplen estas condiciones, le hará la vida mucho más fácil. También hace que sea fácil cambiar la ubicación del directorio raíz si pasa de una unidad local a una de red.

En la aplicación externa, también incluirá este archivo jar desde su ubicación compartida en el classpath de aplicaciones.

5

La respuesta de Simon parece ser la mejor pero un poco desactualizada ahora. Ha buscado en Google este doc de Oracle Installed extensions.

A partir de Java 6, los archivos JAR de extensión también pueden colocarse en una ubicación independiente de cualquier JRE en particular, de modo que las extensiones puedan ser compartidas por todos los JRE instalados en un sistema.

Dice que para Windows debe colocar sus extensiones aquí% SystemRoot% \ Sun \ Java \ lib \ ext.

Cuestiones relacionadas