Java эквивалент C ++ .dll? - PullRequest
10 голосов
/ 14 мая 2010

Итак, я некоторое время программировал, но, поскольку я не работал над многими более крупными модульными проектами, я не сталкивался с этой проблемой раньше.

Я знаю, что такое .dll в C ++ и как они используются. Но каждый раз, когда я видел подобные вещи в Java, они всегда были упакованы с исходным кодом. Например, что бы я сделал, если бы хотел передать библиотеку Java кому-то другому, но не раскрыть исходный код? Вместо источника я бы просто дал библиотеку, а также Javadoc или что-то в этом роде с открытыми методами / функциями другому программисту, который затем мог бы реализовать их в своем собственном коде Java.

Например, если я хотел создать SAX-парсер, который мог бы быть «заимствован» другим программистом, но (по какой-то причине - не могу придумать ни одного в этом конкретном примере), я не хочу показывать мой источник. Может быть, это логин, который я не хочу использовать - я не знаю.

Но как бы это сделал Java? С C ++ .dll-файлы делают это намного проще, но я до сих пор никогда не сталкивался с эквивалентом Java. (Я довольно новичок в Java, и в целом довольно новый программист из "реального мира")

Ответы [ 9 ]

22 голосов
/ 14 мая 2010

Java .jar библиотека является Java-эквивалентом .dll, и она также имеет "Jar Hell", который является Java-версией "DLL-ад"

http://en.wikipedia.org/wiki/JAR_(file_format)

5 голосов
/ 14 мая 2010

Google JAR-файлы.

Редактировать: Википедия подытоживает: http://en.wikipedia.org/wiki/JAR_%28file_format%29

Разработчики программного обеспечения обычно используют файлы .jar для распространения приложений или библиотек Java ...

4 голосов
/ 14 мая 2010

Баночка - это просто несжатый почтовый индекс ваших классов. Все классы могут быть легко декомпилированы и просмотрены. Если вы действительно не хотите делиться своим кодом, вы можете захотеть запутать ваш код.

2 голосов
/ 14 мая 2010

Java-аналогом DLL является файл .jar, который представляет собой zip-файл, содержащий набор файлов Java .class и (возможно) другие ресурсы. См. Sun, Oracle, документация .

1 голос
/ 14 мая 2010

Простой в Java девиз «Пиши один раз, беги куда угодно».Создайте все свои Java-классы в виде JAR-файла, но есть возможности, что кто-то еще сможет увидеть код Java с помощью декомпиляторов.Чтобы кто-то действительно не смотрел на ваш код, затем запутайте флягу, используя приведенную ниже ссылку.

0 голосов
/ 14 мая 2010

Технически, вы можете скомпилировать байт-код Java до собственного кода и создать обычную DLL или общую библиотеку, используя Ahead-Of-Time компилятор .

Однако этой DLL потребуется среда выполнения Java, специфичная для компилятора AOT, и две среды выполнения Java могут не сосуществовать в одном процессе. Кроме того, нужно было бы использовать JNI для любого использования этой DLL.

К сожалению, обфускация имеет слишком много слабостей ...

0 голосов
/ 14 мая 2010

Вам не нужно распространять свой исходный код. Вы можете распространять скомпилированные .class файлы, которые содержат нечитаемый человеком байт-код. Вы можете объединить их в .jar файлы, которые являются просто zip-файлами и примерно эквивалентны Java-файлам .dll-файлов.

Примечание. Файлы .class можно легко декомпилировать (хотя декомпиляторы не могут восстановить 100% информации из источников). Чтобы сделать декомпиляцию более трудной, вы можете использовать обфускатор, чтобы сделать источники менее разборчивыми.

0 голосов
/ 14 мая 2010

Самый распространенный способ упаковки кода Java - это использование файла .jar. Файл .jar - это просто файл .zip.

Чтобы распространять только ваш скомпилированный код, вам нужно создать .jar, содержащий ваши файлы .class. Если вы хотите дополнительно распространять исходный код, вы можете включить файлы .java в отдельную область .jar.

Существует множество инструментов и руководств, объясняющих, как создать .jar.

0 голосов
/ 14 мая 2010

Вы можете опубликовать коллекцию скомпилированных * .class файлов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...