2010-08-12 10 views
6

lo tanto, tengo la siguiente configuración en Eclipse (Java):recibiendo el siguiente error de compilación: "el tipo {---} no se puede resolver que se hace referencia indirectamente a partir de los archivos necesarios .class"

  1. Tengo un proyecto (vamos a llamar a este "proyecto 1") que proporciona una interfaz (que es un paquete privado)
  2. Tengo otro proyecto ("proyecto 2") que contiene un paquete del proyecto 1 ... Clases en este paquete amplíe las interfaces privadas del paquete en el "proyecto 1" y proporcione una interfaz pública agradable.
  3. Ahora, tengo el "proyecto 3" que hace referencia al "proyecto 2". Proyecto 3 a continuación, utiliza el objeto público previsto en el proyecto 2.

Al llamar al constructor del proyecto 2 en el proyecto 3, me sale el siguiente:

"del tipo {---} no se puede resolver. se hace referencia indirectamente desde los archivos .class necesarios "

Si agrego una referencia al proyecto 1 del proyecto 3, todo está bien. ¿Hay alguna manera de NO tener que hacer referencia al proyecto 3 de esta manera? Realmente no tiene sentido hacer referencia a eso.

Estoy usando Eclipse (Helios) con el más reciente de JDK etc ...

+0

¿Estamos hablando de Java básico u OSGi (desarrollo de plugins eclipse o RCP)? Con OSGi, cada complemento (-proyecto) será cargado por un cargador de clases separado y esto también podría explicar sus problemas. –

+0

estamos hablando de las dependencias básicas de java y proyectos – Polaris878

Respuesta

7

Esta es una "dependencia transitiva". Necesitas en tu classpath todas las clases requeridas por cualquier clase que uses. Por lo tanto, necesita tener las clases del proyecto 1 en el classpath de alguna manera; puede empaquetarlas como .jar, por ejemplo. O puede ir al Build Path > Order and Export del Proyecto 2 y marcar el Proyecto 1 como exportado.

Una cosa importante aquí es que las dependencias del proyecto son un mero "artículo de desarrollo": cuando ejecuta el programa de forma autónoma (o lo despliega en un contenedor), las dependencias del proyecto Eclipse desaparecen. Por lo tanto, debe asegurarse de que se cumplan sus dependencias.

+0

En realidad, esto no es estrictamente cierto con respecto a la ruta de clases del tiempo de compilación ... es posible que sus dependencias tengan dependencias que no debe conocer. Agregar dependencias explícitas en cada dependencia explícita de un jar que use sería una carga excesiva. Esas dependencias deben estar disponibles en tiempo de ejecución, pero no en tiempo de compilación. –

+0

Sé que esto es cierto porque Eclipse a menudo registrará un mensaje de error similar al que menciona el OP si está tratando de calcular o mostrar el conjunto de supertipos de una clase, pero no puede debido a que no tiene todos los supertipos en el classpath está usando para hacer el cálculo. Lo hace para muchos proyectos en funcionamiento sin ningún problema de tiempo de ejecución. –

2

No estoy seguro si esto es lo que está buscando. Prueba esto -

  1. En Eclipse, haga clic Project2 seleccionar Build Path -> Configurar Vía de construcción
  2. Ir a Orden y exportación pestaña. debería tener Project1 en la lista. Marque la casilla en frente de él.
  3. Reconstruya sus proyectos.

Básicamente, está exportando la dependencia Project1 del proyecto2. Por lo tanto, cualquier proyecto que agregue project2 como dependencia verá Project1 también sin tener que agregarlo explícitamente a classpath. Eclipse lo hará de forma transparente.

Cuestiones relacionadas