Как распределить собственные сценарии жемчуга без пользовательского модуля наверху?

При использовании буферов непосредственной памяти JVM не выполняет GC для Вас, даже если Вы испытываете нехватку непосредственной памяти.

, Если Вы звоните ByteBuffer.allocateDirect() и Вы получаете OutOfMemoryError, можно найти, что этот вызов прекрасен после инициирования GC вручную.

7
задан brian d foy 11 November 2009 в 18:04
поделиться

6 ответов

Правильный способ - сказать им: «Не делайте этого!» Я надеюсь, что они не ожидают, что они переместят exe-файл и программа продолжит работать. Это ничем не отличается.

Тем не менее, есть несколько альтернатив. Один из них - замена сценария оберткой (например, pl2bat), которая знает полный путь к настоящему сценарию. Другой вариант - использовать PAR , но для этого потребуется установить PAR и / или parl (из PAR :: Packer).

6
ответ дан 6 December 2019 в 23:07
поделиться

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

4
ответ дан 6 December 2019 в 23:07
поделиться

Распространите установщик вместе со сценарием. Установщик должен быть запущен с правами root, и он поместит пользовательские модули в стандартное системное расположение (/ usr / local / lib / perl5 / site_perl или что-то еще).

Я не пробовал, но Module :: Install выглядит полезным в этом отношении. Он описывается как:

Автономный расширяемый установщик модуля Perl

2
ответ дан 6 December 2019 в 23:07
поделиться

В качестве варианта «поместите все модули в одно место и сделайте так, чтобы ваши приложения знали об этом», который будет работать даже на нескольких компьютерах и сетях, возможно, вам стоит проверить PAR :: Репозиторий и соответственно PAR :: Репозиторий :: Клиент . Вы просто предоставите один исполняемый двоичный клиентский файл, который подключается к репозиторию (через файловую систему или https) и запускает любое из произвольного количества программ (с использованием произвольного набора модулей), предоставляемых репозиторием, который запрашивает пользователь.

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

2
ответ дан 6 December 2019 в 23:07
поделиться

На самом деле я придумал собственное решение, и мне любопытно, какой прием он вызовет.

Я написал сценарий, который читает сценарий Perl и ищет операторы "использовать / требовать". Найдя их, он проверяет, является ли модуль частью стандартной библиотеки (просматривает путь к модулю для /perl5/\d+.\d+[\d.pting+/), а затем переписывает строку use / require двумя разными способами в зависимости от использование.

Если требуется :

{
    ... inline the entire module here...
}

Если , используется :

BEGIN {
    ... inline the entire module here...
}

Если , использование имеет импорт , сразу после этого введите:

BEGIN { import Module ...imports seen... }

Я понимаю, что не работает с модулями, использующими XS, но меня это устраивало. В основном мне нужно поддерживать только чистые модули Perl.

-3
ответ дан 6 December 2019 в 23:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: