2010-12-10 17 views
50

Estoy aprendiendo Java en estos días y he pasado mucho tiempo con .NET, así que cuando quiero exportar o importar bibliotecas, generalmente están en formato .dll que se llama ensamblado en entorno .Net y se compilan en IL y pueden tener recursos como imágenes, xml, audio y son on, de cualquier forma.Diferencia entre archivo .jar y .dll

Me pregunto el mismo proceso en Java también. He leído documentos pero en realidad me han confundido un poco y para aclarar las cosas necesito tu ayuda chicos.

Preguntas:

  1. NET es lo mismo que .jar de Java?
  2. .dll contiene código IL compilado y .jar contiene archivos de código .class/byte compilados?
  3. Dicen recursos, ¿de qué tipo de recursos estamos hablando aquí? ¿Imágenes, archivos .txt, etc. o todos ellos posibles?

  4. He examinado AWS (Amazon Web Servicio API para Java) y vi tres archivos .jar y son

    1. AWS-java-sdk-1.1.1.jar
    2. aws- java-sdk-1.1.1-javadoc.jar
    3. AWS-java-sdk-1.1.1-sources.jar

y contienen archivos .class - documentación de java en formato html y .java archivos que aún no están compilados. Entonces me di cuenta de que .jar no solo incluye códigos de bytes compilados (.class) y también otras cosas.

  1. Cuando quiero importar bibliotecas de Java, ¿siempre tendré que importar archivos .jar?
  2. Cuando deseo exportar mis propias bibliotecas de Java, ¿debería exportar en el archivo .jar?

Gracias por la ayuda con anticipación.

+2

Yo mismo me he estado preguntando esto, ¡ojalá pudiera dar más votos favorables! – John

+1

Soy todo lo contrario. Estoy aprendiendo .NET estos días después de Java. – KJW

Respuesta

69

¿Es un .NET Assembly lo mismo que java .jar?

Juegan el mismo papel, sí.

.dll contiene código IL compilado y .jar contiene archivos de código .class/byte cumplimentados?

Sí. Aunque los JAR son solo archivos zip (puedes abrirlos en tu herramienta Zip favorita), así que realmente pueden contener casi cualquier cosa.

Dicen recursos, ¿de qué tipo de recursos estamos hablando aquí? ¿Imágenes, archivos .txt, etc. o todos ellos posibles?

Se permite cualquier tipo de archivo en un JAR. Su código Java puede acceder al contenido de los archivos dentro del contenedor a través de, por ejemplo, getResourceAsStream o getResource. Obviamente, los archivos .class en un JAR se tratan especialmente (como bytecode).

He examinado AWS (Amazon Web Service API para java) y vi tres archivos .jar y son: aws-java-sdk-1.1.1.jar, aws-java-sdk-1.1.1 -javadoc.jar, aws-java-sdk-1.1.1-sources.jar

El embalaje anterior es bastante común. A veces las personas usan .jar como una extensión de archivo alternativa a .zip. Encuentro esta práctica confusa, pero no es poco común, y Amazon lo ha hecho en este caso. Creo que esta práctica se hizo más común con el lanzamiento de Maven, que almacena código fuente de referencia en archivos llamados .jar.

aws-java-sdk-1.1.1.jar - Este es el único archivo necesario para la compilación y la ejecución. Contiene las clases (archivos .class) y los recursos necesarios para que funcione la biblioteca.

aws-java-sdk-1.1.1-sources.jar - Esto es solo un archivo zip que contiene el código fuente (archivos .java) para la biblioteca. No es necesario para compilación o ejecución. Se proporciona para ayudarlo a solucionar problemas que pueda encontrar al usar la biblioteca. Puede descomprimir este archivo y leer el código fuente de su disco duro. Sin embargo, su IDE probablemente pueda utilizar este archivo directamente creando un "archivo adjunto de origen" para el JAR de la biblioteca principal. Con esta biblioteca-> asociación de origen configurada en su IDE, su IDE podrá mostrarle el código fuente de la biblioteca cuando use la función "Ir a definición" de IDE en una clase de biblioteca.

aws-java-sdk-1.1.1-javadoc.jar - Esto es solo un archivo zip que contiene JavaDoc para la biblioteca. Nuevamente, no es necesario para compilación o ejecución. JavaDoc es solo HTML, por lo que podría descomprimir este archivo y leer el HTML de JavaDoc directamente desde su disco duro. Sin embargo, la mayoría de los IDE pueden crear un "archivo adjunto de javadoc" a la biblioteca principal, que le permite extraer JavaDoc contextual para la biblioteca desde el IDE. En realidad, la mayoría de los IDE pueden generar JavaDoc sobre la marcha desde -sources.jar, por lo que rara vez uso javadoc jars.

Cuando quiero importar bibliotecas de Java, ¿siempre tendré que importar archivos .jar?

Se suele llamar "agregar JAR al classpath", pero sí. Casi siempre necesita ayudar a Java a encontrar todos los JAR que está utilizando al construir un classpath cada vez que compila o ejecuta. En general, el uso de JAR y classpaths es un proceso mucho más manual y explícito que el uso de DLL en .NET. Por ejemplo: Java no tiene un equivalente directo de la "caché de ensamblados global" de .NET; también vainilla Java no cargará automáticamente .jars desde el directorio de trabajo.

Hay algunas otras técnicas para crear una ruta de clase de sensación más "automática", pero están un poco avanzadas: las classpaths de Manifest.MF son posibles, por ejemplo, pero este enfoque se usa con poca frecuencia ya que es frágil. A partir de Java 6, Java tiene soporte limitado para usar wildcards in the classpath.

Cuando quiero exportar mis propias bibliotecas de Java, en caso de que necesite exportar en el archivo .jar

Esta es la norma, sí.

+3

Esta fue una gran explicación. Muchas gracias :) – Tarik

+1

Agregaría a la última parte que 'usar JAR y classpaths es un proceso mucho más manual y explícito' - esta es la razón por la cual una herramienta como' Maven' es tan necesaria, solo para la administración de la dependencia. tratar con todos los jAR no dependientes de JRE es un verdadero dolor – mmcrae

7

Para responder a esta pregunta específica.

  1. AWS-java-sdk-1.1.1.jar
  2. AWS-java-sdk-1.1.1-javadoc.jar
  3. AWS-java-SDK-1.1.1-sources. JAR

el 1) es el archivo del compilador java Archive (JAR), que en .NET que se llama un DLL. El 2) es el javadoc. Una documentación HTML de las clases de Java (se encuentra en 1) junto con la descripción del método. El 3) es el código fuente (archivos java) de 1).

  1. Cuando quiero importar bibliotecas de Java, voy siempre hay que .jar de importación?
  2. Cuando deseo exportar mis propias bibliotecas de Java, debería necesitar exportar en un archivo .jar.

Para 1) Si es necesario utilizar una clase que se encuentra en un archivo jar, a continuación, tendrá que importar el frasco en su proyecto.

Para 2) No es necesario. Puede agrupar sus jarras de dependencia en su biblioteca o paquete cada uno en sus propios jar e importarlos a su proyecto.

  1. .NET Assembly es lo mismo que java .jar? Respuesta: Sí.
  2. .dll contiene código IL compilado y .jar contiene archivos de código .class/byte compilados? Respuesta: .jar archivos es un archivo archivado de recursos de java, clases, imágenes/iconos/etc. eso es necesario para una aplicación, al igual que en .DLL. Los archivos de clase contienen compilar los códigos fuente de Java (llamado bytecode java).
8

puedo responder parte de esa pregunta :-)

lo que tengo entendido, un jar es simplemente un archivo "Java Archive". Puede contener todo lo que desee, pero se usa con más frecuencia para distribuir versiones binarias de bibliotecas. También se puede usar para distribuir archivos ejecutables: al hacer doble clic en un archivo JAR se iniciará la aplicación, si es así como se ha empaquetado.

Como tal, puede ser difícil decir para qué se destina un archivo particular jar. Por ejemplo, ¿qué es aws-java-sdk-1.1.1-sources.jar? ¿Es un auto instalador? Un archivo de código comprimido? Sin leer la documentación, nadie sabe.


Editar: ejemplo de ello, me acaba de descargar el archivo JAIjar suponiendo que era una versión binaria de la biblioteca. Pero, de hecho, contiene la aplicación de instalación.

+0

+1 para la confusión de jar ... nunca se sabe hasta que lo abra –

Cuestiones relacionadas