Три команды, чтобы собрать свою Java машину

$ svn co https://svn.apache.org/repos/asf/harmony/enhanced/trunk
$ cd trunk
$ ant -Dauto-fetch=true

Введение

Следуйте этой инструкции, чтобы настроить окружение для сборки виртуальной машины Apache Harmony, собрать исходный код и запустить проверочный тест. Для этого необходимо:

  1. Убедиться, что установлено все необходимое ПО.
  2. Загрузить исходный код.
  3. Собрать исходный код.

После успешного завершения сборки кода, Вы сможете запускать Java приложения с помощью Apache Harmony. Стабильную версию декабрьского дистрибутива можно скачать по адресу http://harmony.apache.org/download.cgi.

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

(info) Примечание. Данная страница является переводом английской версии на сайте. Страница, как и весь проект, находятся в стадии разработки. Если Вы обнаружили ошибку или Вам нужна помощь, пишите в список раассылки проекта по адресу dev@harmony.apache.org.

Требования к системе

Общие требования

Для работы с Harmony необходимо установить следующее ПО:

  • Операционная система Linux или Windows
  • Apache Ant версия 1.6.5 или более поздняя
  • Subversion (svn)
  • Java SE 5 JRE
    (info) Примечание. Если Вы выходите в Интернет через прокси-сервер, укажите имя и порт прокси-сервера в настройках ant и svn. Для этого следуйте указаниям документации клиентского приложения. Например, для настройки консольной версии svn внесите соответствующие изменения в файл ~/.subversion/servers. Для работы ant, установите следующее значение для переменной окружения ANT_OPTS: -Dhttp.proxyHost=<host> -Dhttp.proxyPort=<proxy>.

Tребования для отдельных платформ

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

Windows

  • SDK для платформы Windows
  • Microsoft Visual Studio .NET 2003 или внешний компилятор:
    • Компилятор Microsoft C/C++, версия 7 или более поздняя
    • Компилятор Intel C++, версия 9.0

Linux

  • gcc/g++ компилятор, версия 3.3.3 или более поздняя (версии до 3.3.3 не тестировались)
  • make
  • Библиотеки liblcms1-dev, libpng12-dev, libjpeg62-dev, libx11-dev, libxft-dev, binutils-dev, libxml2-dev

Дополнительные требования

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

Для построения DRLVM отдельным компонентам системы требуются:

  • Xalan-Java, версия 2.7.0 (копируется из библиотек классов)
  • Cpp Tasks collection, версия 1.0 beta 3 or higher (загружается из сети)
  • Ant-Contrib набор задач, версия 0.6 или более поздняя (загружается из сети)
  • Zlib библиотека, бинарные файлы, версия 1.2.1 или более поздняя (загружается из сети)
  • Apache Portable Runtime Layer, версия 1.2.6 (загружается из сети)
  • APR-util, версия 1.2.6 (загружается из сети)
  • APR-iconv, версия 1.1.1 (загружается из сети)
  • Log4cxx, версия 467164 из svn (загружается из сети)

Данные компоненты необходимы для построения исходного кода как на Windows, так и на Linux системах.

Вы можете загрузить и установить дополнительные компоненты до сборки DRLVM и указать их расположение, как описано в файле, шаг 3.3.1. Там же содержится информация о том, как отключить автоматическую загрузку сторонних компонент во время сборки и использовать уже установленные версии.
Примечание: поскольку требования к ПО периодически изменяются, не рекомендуется самостоятельно устанавливать недостающие компоненты. Система сборки сделает это за вас.

Загрузка дерева каталогов кода

Исходный код Harmony ВМ разделен на несколько частей. Для построения всей среды исполнения вам необходимо построить библиотеку классов и виртуальную машину. Используйте объединенную систему сборки для построения всей среды, а затем работайте с библиотекой классов и/или ВМ по вашему выбору. В настоящее время, система сборки использует виртуальную машину DRLVM.

Для того, чтобы выгрузить объединенную систему сборки из SVN репозитория, используйте следующую команду:

$ svn co https://svn.apache.org/repos/asf/harmony/enhanced/trunk

Данная команда выгружает дерево каталогов с пустыми директориями working_classlib и working_vm. После построения исходного кода на следующем этапе, в директорию working_classlib будет выгружена копия дерева каталогов библиотеки классов, а в директорию working_vm - копия дерева каталогов DRLVM.

(warning) Примечание: в ОС Windows, если корневая директория системы сборки находится на много уровней ниже корневого каталога, излишне длинный путь к библиотеке классов может вызвать ошибку при попытке выгрузить исходный код. Для решения этой проблемы, переместите корневую директорию системы сборки выше по дереву каталогов или смените операционную систему.

Сборка исходного кода комплекта разработчика HDK


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

Для того, чтобы загрузить необходимые дополнительные компоненты, исходный код Harmony и построить готовую среду исполнения и комплект разработчика Harmony Java SE (HDK), в корневой папке системы сборки вызовите следующую команду:

$ ant -Dauto.fetch=true

Данная команда выгружает все сторонние компоненты, которые могут распространяться под различными лицензиями, отличающимися от лицензии Apache, см. полный список лицензий в файле THIRD_PARTY_NOTICES.txt в корневой папке.

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

$ ant

(info) Для построения полной сборки рекомендуется увеличить объем динамической памяти (Java heap), используемой программой Apache Ant. Для этого, измените значение переменной окружения ANT_OPTS в зависимости от вашей операционной системы, например:

ANT_OPTS='-Xms256m -Xmx512m' 

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

Пошаговая инструкция сборки исходного кода

Извлечение дерева каталогов

Для извлечения дерева каталогов, используйте соответствующее имя, указанное в скрипте build.xml в объединенной системе сборки. В корневой директории объединенной системы сборки, выполните следующую команду:

  
$ ant populate_source

Данная команда выкачивает библиотеку классов и ВМ в директориях working_classlib и working_vm соответственно, причем версия извлеченного кода соответствует версии файла build.xml. Поскольку дерево каталогов довольно велико, извлечение всего каталога может занять продолжительное время.

Обновление дерева каталогов

По прошествии времени, вы можете синхронизировать вашу копию исходного кода с текущей версией на SVN репозитории, вызывая команду svn update в нужной директории, например:

$ cd working_classlib
$ svn update

Таким способом вы можете получать обновления кода библиотеки классов и ВМ. После исполнения команды в вашем дереве каталогов отобразятся все изменения, внесенные в SVN репозиторий после предыдущей синхронизации. Если у вас есть доступ к репозиторию с правом записи, вы можете загружать обновления командой svn checkin.
Примечание: если после обновления дерева каталогов появляется ошибка при построении библиотеки классов, удалите результаты предыдущей сборки командой

$ ant clean

3. Сборка библиотеки классов

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

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

Для загрузки внешних компонент и сборки библиотеки классов используйте следующие команды:

$ cd working_classlib
$ ant fetch-depends
$ ant

Для тестирования библиотеки классов вам необходима виртуальная машина. Если у вас уже есть ВМ, запустите полный набор тестов для библиотеки классов следующей командой:

$ ant test

Для тестирования подходит не только виртуальная машина DRLVM, см. раздел Составление среды исполнения из построенных компонент. Если вы хотите тестировать библиотеку классов вместе с DRLVM, следуйте дальнейшим инструкциям для ее сборки.

Сборка виртуальной машины DRLVM

1. Перейдите в директорию build

После сборки библиотеки классов, постройте ВМ для получения функционирующей среды исполнения. Для этого, вернитесь в корневую директорию объединенной системы сборки и перейдите в директорию working_vm, а затем в поддиректорию build:

$ cd working_vm/build

2. Настройте рабочее окружение

  • Внесите изменения в файл drlvm.properties.

Укажите системе сборки DRLVM директорию с библиотекой классов: в директории build переименуйте файл drlvm.properties.example в drlvm.properties.

 
$ cp drlvm.properties.example drlvm.properties

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

Проверьте, что в используемом файле параметр deploy.canonical.flag имеет значение TRUE. Этот параметр позволяет системе сборки создать директорию deploy/jre/bin, которая понадобится на следующих этапах сборки.

  • Укажите используемый компилятор.

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

Компилятор Windows Linux MSVC компилятор set CXX=msvc –
Intel(R) компилятор set CXX=icl export CXX=icc GCC компилятор N/A export CXX=gcc

*Укажите режим сборки: отладочный (debug) или рабочий (release).

По умолчанию, система сборки работает в отладочном режиме. Для переключения в рабочий режим, выполните следующие команды:

Windows:

> set BUILD_CFG=release
> build.bat

Linux:

$ BUILD_CFG=release ./build.bat

3. Загрузите дополнительные компоненты

Перед тем, как запустить сборку, необходимо загрузить все дополнительные компоненты. Обратите внимание: эта операция может занять длительное время.

Windows:
{{{C:...\trunk\working_vm\build>build.bat update
}}}

Linux:

{{{$ sh build.sh update
}}}

4. Запустите сборку кода

Чтобы запустить сборку, вызовите следующую команду:

Windows:

C:...\trunk\working_vm\build>build.bat

Linux:

$ sh build.sh

5. Запустите набор тестов для проверки правильности сборки

Для проверки правильности сборки, запустите набор тестов acceptance tests командой:

Windows:

C:...\trunk\working_vm\build>build.bat test

Linux:

$ sh build.sh test

Сборка виртуальной машины успешно завершена. Полная функционирующая среда исполнения готова к использованию и находится в директории deploy/jre внутри директории build.
Чтобы это проверить, вы можете, например, узнать версию используемой среды исполнения:

$ cd deploy/jre/bin
$ ./java -version
Apache Harmony Launcher:
(c) Copyright 1991, 2006 The Apache Software Foundation or its licensors, as applicable.
java version "1.5.0"
pre-alpha : not complete or compatible
svn = r479551, (Nov 27 2006), Windows/ia32/msvc 1310, debug build
http://harmony.apache.org

Конструирование среды исполнения из скомпилированных компонент

Разработчики библиотек классов могут использовать виртуальную машину DRLVM или установить другую совместимую ВМ. Например, вы можете использовать IBM virtual machine которая была предоставлена компанией IBM для нужд разработчиков проекта на условиях пробной, не открытой лицензии на выполняемый код. Для установки ВМ следуйте прилагающейся документации. Вы можете развернуть дерево каталогов библиотек классов поверх дерева каталогов Harmony, так что директории 'jdk' совпадут.

Windows:

$ unzip <path_to_vm_zip> -d ../..

Linux:

$ tar xzf <path_to_vm_tarball> --directory ../..

Для работы с библиотекой классов Harmony, используйте подробную документацию для этого компонента.
Разработчики виртуальной машины DRLVM используют ВМ, построенную в результате сборки, то есть среду исполнения, состоящую из DRLVM и библиотеки классов.

Запуск Java-приложений

Убедитесь, что переменная окружения JAVA_HOME не имеет значения или указывает на директорию deploy/jre.
Используйте стандартный синтаксис для запуска Java-приложений с помощью программы запуска в директории deploy/jre/bin:

$ deploy/jre/bin/java -showversion -jar helloworld.jar
Apache Harmony Launcher:
(c) Copyright 1991, 2006 The Apache Software Foundation or its licensors, as applicable.
java version "1.5.0"
pre-alpha : not complete or compatible
svn = r479551, (Nov 27 2006), Windows/ia32/msvc 1310, debug build
http://harmony.apache.org
Hello world!
  • No labels