Cuando programamos en C++ tenemos archivos de cabecera y archivos fuente. Cuando nuestra empresa vende nuestro producto (que básicamente es solo una biblioteca de funciones útiles), proporcionamos al cliente solo nuestros archivos de encabezado y el código fuente compilado (no el código fuente real). De esta forma, los clientes que compran el código ven las definiciones de función en los archivos de encabezado y pueden realizar llamadas a estas funciones utilizando el código compilado.
¿Cómo haría una empresa que está desarrollando en Java para compartir la funcionalidad de su biblioteca sin dar su código? Dado que no hay archivos de encabezado en Java, esto solo se hace a través de la documentación; es decir, proporcionar al cliente un documento API que muestre todas las firmas de funciones y también proporcionar un archivo jar con las clases compiladas.
En Java, no necesita el código fuente para compilar: el código de bytes contiene todos los metadatos que necesita.
Entonces, por ejemplo, si creo una interfaz con algunos métodos, la compilo en un archivo de clase, luego la empaqueto en un archivo jar y le doy ese archivo jar, puede usar esa interfaz y ver todos sus miembros, etc. sin tener el código fuente.
Por lo general, también proporcionaría documentación para explicar el significado de los métodos, etc., pero no son necesarios para compilar en el archivo jar.
Tomemos, por ejemplo, YWorks YFiles , ofrecen su librería patentada pero ofuscan su distribución (usando su propio ofuscador ).
En cuanto a la orientación sobre cómo usar su lib, envían su lib con javadocs, algunos documentos de procedimientos y algunos códigos de muestra.