Является ли GCJ (GNU Compiler for Java) жизнеспособным инструментом для публикации webapp?

Можно ли использовать GCJ для публикации серверных приложений? Webapps?

Мой босс убежден, что компиляция нашего (my) webapp в бинарный исполняемый файл - блестящая идея. (Опять же, ему нравятся приятные, маленькие простые вещи с мигающими огнями, которые он может понять.) Он инстинктивно не видит проблем с этим, в то время как я вижу только бесконечную серию проблем и деградации. После того, как я начал говорить с ним о сложности нашей платформы и более подробно о деталях байтового кода, JVM, библиотеках, различиях между операционными системами, архитектурами процессоров и т.д.... ну... его глаза глазуруют, он улыбается и он ясно дал понять, что думает, что я по-детски резистивный.

Зачем ему нужен один волшебный исполняемый файл? Он видит пару "преимуществ":

  • Если это двоичный исполняемый файл, тогда трудно перепроектировать и обойти любое лицензирование. Руководство постоянно опасается, что это происходит, хотя мы продаем в более крупные корпорации, которые обычно не обманывают серверное программное обеспечение.
  • Существует такое видение загрузки этого волшебного исполняемого файла, его запуск, и все работает. (Больше не посылайте меня, чтобы делать установки клиентов, что не так часто.)

Итак, я выполнил свои обязательные 20 минут поиска в Интернете, и теперь я здесь.

Немного фона в моем приложении:

Из чего он сделан:

  • Java 6 (Sun JVM)
  • AspectJ 1.6
  • Tomcat 6
  • Hibernate 3
  • Spring 2
  • еще два десятка поддерживающих файлов jar

Что он делает

  • Потоковая среда CMS
  • Показатель производительности
  • Развернутый в Linux, Solaris, Windows (и разработанный на Mac)

Как вы, вероятно, можете собрать, я очень скептически отношусь к этой "компиляции Java в собственный код". Звучит так, будто Mono (VB on Linux) вернулся в 2000 году. Но я слишком пессимистичен? Это жизнеспособно? Должен ли я действительно тратить время (дни, если не недели), чтобы попробовать это?

Есть еще один подобный поток (Параметры компилятора Java для создания файлов .exe), но это слишком просто, ссылки устарели и не очень ориентированы на серверный вопрос.

Ваши информированные мнения будут очень заветными, мои дорогие SOpedians! ТИА!

Ответы

Ответ 1

FWIW: Мне никогда не было удачи с GCJ, у меня было много проблем с этим, и у меня возникли некоторые неясные проблемы, которые потребовались навсегда, чтобы диагностировать GCJ, а не меня (я всегда очень неохотно виноват вещи во внешних библиотеках). Я открыто признаю, что это произошло несколько лет назад, и я никогда не хотел снова идти к GCJ. Чтобы дать это больше, это было, когда я учился в школе, и работал над почти тривиальной программой, поэтому на "уровне предприятия" у меня был здоровый страх перед GCJ.

Ответ 2

Я не знаю о GCJ, но моя компания успешно использует Excelsior JET. Мы еще не сделали это с помощью webapp (пока), но он должен иметь возможность обрабатывать все, что может использовать Sun JRE. На самом деле JET является сертифицированной Sun Java-реализацией.

Ответ 3

Excelsior JET - окончательный ответ

Ответ 4

Наличие одного исполняемого файла имеет несколько недостатков:

  • Вы не можете легко его исправлять (т.е. заменить один файл класса)
  • Я не думаю, что его можно назвать webapp - я предполагаю, что он не будет работать в Tomcat.
  • Это нестандартно, что увеличивает затраты на обслуживание.
  • Он нестандартен, поэтому поддержка инструмента уменьшается.

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

Ответ 5

Я очень кратко использовал GCJ и быстро перешел в Sun JDK. Главными проблемами, которые я видел, было то, что GCJ, похоже, всегда немного отстает от последней версии Sun JDK и что были странные загадочные ошибки, вызванные незначительными различиями с Sun JDK. В версии 1.5 (которая предположительно совместима с Sun v1.5) у меня были проблемы с компиляцией с использованием дженериков и, наконец, сдался и перешел в Sun JDK.

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

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

Ответ 6

Я немного поиграю с дьяволами, хотя я мало что знаю о GCJ.

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

Возможность поддержки приложения лучше также подходит для бизнеса.

Так что, возможно, стоит изучить вопрос о том, что ничто не может потерять клиента быстрее, чем приложение, которое не работает.

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

Ответ 7

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

Ответ 8

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