Jar File - Запретить доступ к исходному коду - PullRequest
4 голосов
/ 28 января 2011

Я хочу передать небольшое Java-приложение как исполняемый файл, но я не хочу, чтобы кто-либо имел доступ к моему исходному коду. Прав ли я, предполагая, что исходный код (файлы .java) не включен в jar-файл?

User269799

Ответы [ 10 ]

3 голосов
/ 28 января 2011

Если вы не поместите java-файлы в jar-файл, они волшебным образом не появятся :) Конечно, вы можете включить в jar-файл что угодно. Вы можете перечислить содержимое для проверки:

jar tvf foo.jar

Обратите внимание, что Java можно довольно легко декомпилировать - поэтому, хотя у любого получателя не будет доступа к вашему фактическому исходному коду с комментариями и т. Д., Они могут довольно ясно увидеть вашу логику. Вы можете захотите использовать обфускатор для защиты своего IP. Лично я стараюсь избегать запутывания - учитывая то, как трудно большинству из нас поддерживать код, когда у нас есть реальный источник с комментариями и тестами, представьте, как трудно, когда у вас нет таких вещей :) Это ваш звонок, хотя. Просто убедитесь, что вы тщательно протестировали запутанный код - могут быть тонкие проблемы, особенно если вы используете рефлексию.

2 голосов
/ 28 января 2011

Если компьютер может запустить его, человек может его реконструировать, и для Java это не особенно сложно.

Так что техническая защита просто не сработает. Вам нужна юридическая защита в виде обязывающего контракта или аналогичного. Вы можете даже поставить свои работы под GPL, за исключением тех, которые платят вам, что достаточно для большинства предприятий, чтобы избежать кражи вашей работы.

Какую ситуацию вы точно хотите избежать?

2 голосов
/ 28 января 2011

Да. Обычно jar-файлы содержат только скомпилированные байтом файлы .class. Тем не менее, они также могут содержать исходный код - это зависит от того, что вы (или ваши инструменты, соответственно) вложили в них.

Обратите внимание, однако, что декомпиляция работает очень хорошо на файлах .class, поэтому не делайте ничего, связанного с безопасностью, полагаясь на методы обфускации кода, такие как эта.

2 голосов
/ 28 января 2011

Вы правы, в jar нет исходного кода (если вы не сконфигурируете свою систему сборки так, чтобы он специально туда помещался). Но вы всегда рискуете, что ваш код декомпилируется из байт-кода. Здесь может помочь обфускатор.

2 голосов
/ 28 января 2011

Jar-файлы обычно включают только файлы .class, которые являются файлами байт-кода java, а также ресурсы.Однако, чтобы быть немного более защищенным в вашем коде, вам нужно отключить отладочную информацию, и если вы действительно хотите быть в безопасности, запустите ее через обфускатор.Комментарий berry120 прав: они могут содержать исходные файлы, но обычно их нет.Я просто хочу уточнить для любых будущих читателей этого.Это зависит от настроек инструмента, который вы используете для создания баночки.

1 голос
/ 28 января 2011

Jar-файлы могут содержать источник (вы можете выбрать, включать его или нет), поэтому не включайте источник специально, это не проблема. Что вам нужно знать, так это то, что люди потенциально могут перепроектировать файлы классов, которые будут в jar-файле.

Вы можете обойти это использование обфускатора, такого как yGuard , который легко подключается как задача муравья, но, как уже говорили другие, действительно ли ваш код настолько важен, что его никто не видит? 1005 *

1 голос
/ 28 января 2011

Зависит от того, как вы сгенерировали .jar. В Eclipse есть опция включения файлов .java в .jar, но по умолчанию она отключена, и вы должны активировать ее, если хотите.

1 голос
/ 28 января 2011

Вы правы, однако файлы .class легко разбираются на код Java, и в большинстве случаев он довольно точен.

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

1 голос
/ 28 января 2011

Обычно нет, но вы можете использовать команду jar -tvf <filename> для проверки.

Однако я должен предупредить вас, что большинство .class файлов чрезвычайно легко декомпилировать в разумно читаемый исходный код Java.

Чтобы избежать этого, вам придется использовать обфускатор, но это требует дополнительных усилий от вашего имени. (Например, RetroGuard .)

Сказав это, задайте себе вопрос: "Является ли мой код действительно настолько ценным или особенным, что мне нужно для всего этого?" Обычно ответ - нет, большая часть кода, который мы пишем, ничего особенного.

0 голосов
/ 28 января 2011

Файл .jar не включает исходный код, только байт-код (.class). Но поскольку байт-код не зависит от машины, его можно очень легко декомпилировать. Невозможно запретить другим пользователям доступ к вашему исходному коду.

...