Является ли GCJ (GNU Compiler for Java) жизнеспособным инструментом для публикации веб-приложения? - PullRequest
13 голосов
/ 15 сентября 2008

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

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

Почему он хочет один магический исполняемый файл? Он видит пару «преимуществ»:

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

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

Немного предыстории моего приложения:

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

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

Что он делает

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

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

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

Ваши информированные мнения будут высоко оценены, дорогие мои СОПЕДИАНЫ! ТИА!

Ответы [ 8 ]

6 голосов
/ 15 сентября 2008

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

4 голосов
/ 15 сентября 2008

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

3 голосов
/ 18 сентября 2010

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

2 голосов
/ 15 сентября 2008

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

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

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

0 голосов
/ 17 сентября 2010

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

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

Способность поддерживать приложение лучше и для бизнеса.

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

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

0 голосов
/ 17 сентября 2010

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

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

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

0 голосов
/ 16 сентября 2008

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

0 голосов
/ 15 сентября 2008

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

...