Скомпилируйте программу Java на сервере непосредственно перед тем, как пользователь загрузит программу - PullRequest
1 голос
/ 28 января 2011

Я сделал быстрый поиск и не смог найти ничего по этой теме.Я даже не уверен, возможно ли это, но мне любопытно.

Можно ли скомпилировать программу Java на сервере прямо перед тем, как пользователь загрузит программу?Приложение, которое я могу придумать для этого, будет изменять исходный код программы на лету, прежде чем пользователь загрузит его.Это может быть полезно при настройке, когда программа модифицируется на основе пользовательского ввода или настроек на веб-сайте, и эти изменения жестко запекаются в программе, поэтому то, что они загружают, является отдельной программой, настроенной и полностью переносимой.Другое приложение, о котором я подумал, было бы, если бы каждый пользователь использовал разные комбинации функций в программе, поэтому он компилируется только с тем набором функций, который им нужен / нужен на лету.я мог бы проверить это, но это в основном моя академическая мысль и любопытство.

Короче говоря, кто-нибудь знает какие-нибудь технологии, которые могли бы создать систему, подобную этой работе?

Ответы [ 2 ]

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

Конечно, это возможно.

Просто дайте ссылке на скачивание указать на некоторый скрипт, который компилирует / упаковывает исходный код и отправляет обратно результат. Это может быть реализовано, например, в PHP, всего за несколько строк кода. Это очень похоже на капчу: на лету генерируются уникальные данные, получаемые через URL.

Я сам думал об этой идее для обфускации протоколов и для генерации "алгоритма регистрационного ключа программного обеспечения".

Однако я бы порекомендовал вам выделить те части, которые вы хотите перекомпилировать, в отдельный класс / набор классов, скомпилировать только их и упаковать с остальной частью (уже скомпилированной) программы по запросу. *

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

Я написал библиотеку, использующую API-интерфейс компиляции (поставляется с Java 6) для компиляции кода в ememory, но я бы посоветовал вам не создавать предварительный код, поскольку все, что вы можете делать с генерируемым кодом, вы можете делать с помощью динамического код. Может быть небольшое преимущество в производительности, но я предлагаю вам попробовать делать то, что вам нужно, с динамическим кодом (то есть кодом с циклами, если операторы и рефлексию), чтобы делать то, что ваш сгенерированный код будет делать в первую очередь, поскольку это намного проще и, вероятно, будет делать то, что нужно. ты хочешь.

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

...