Этот пост посвящен созданию моментальных снимков GlassFish 4.0 и включает в себя хаки. Я нашел официальную инструкцию для FullBuild от GlassFish, а затем решил сам собрать сервер. Иногда вам может не потребоваться дождаться, пока группа соберет файлы сборки GlassFish. В этой записи я упоминаю Artifactory как частный репозиторий Maven, конечно, вы можете использовать и что-то еще. Проверьте исходный код для GlassFish 4.0 самостоятельно из Subversion:
|
1
|
svn checkout https://svn.java.net/svn/glassfish~svn/trunk/main glassfish-main |
Вам нужно взломать файл настроек Maven для вашей рабочей станции, чтобы исключить артефакты Eclipse. Вот пример файла settings.xml , который я настроил.
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
xsi:schemaLocation='http://maven.apache.org/SETTINGS/1.0.0 <!--Maven http://maven.apache.org/settings.html --> <localRepository/> <interactiveMode/> <usePluginRegistry/> <offline/> <pluginGroups/> <servers> <server> <id>ACME-ARTIFACTORY-PRIVATE</id> <username>administrator</username> <password>password</password> </server> </servers> <mirrors> <mirror> <id>maven-central</id> <mirrorOf>central,!eclipselink.repository</mirrorOf> </mirror> </mirrors> <proxies/> <profiles/> <activeProfiles/></settings> |
Прежде чем мы сможем скомпилировать весь код GlassFish, нам нужно взломать POM-файлы, чтобы они устанавливали артефакты на наш частный сервер Artifactory вместо Maven Central. Добавьте следующий раздел в файлы POM в дистрибутиве:
|
01
02
03
04
05
06
07
08
09
10
11
12
|
<distributionManagement> <repository> <id>ACME-ARTIFACTORY-PRIVATE</id> <name>acme-releases</name> <url>http://peabody.internal.acme.com/artifactory/ACME-ARTIFACTORY-PRIVATE</url> </repository> <snapshotRepository> <id>ACME-ARTIFACTORY-PRIVATE</id> <name>acme-snapshots</name> <url>http://peabody.internal.acme.com/artifactory/ACME-ARTIFACTORY-PRIVATE</url> </snapshotRepository></distributionManagement> |
В приведенном выше разделе измените определения из ACME на сервере Artifactory, которым вы владеете в частном порядке, а затем скопируйте следующие файлы POM:
-
main/pom.xml -
main/appserver/javaee-api/pom.xml -
main/appserver/pom.xml -
main/nuclues/pom.xml
Это неприятный хак, потому что мне не нравится, что вы не можете настроить изменение сервера развертывания и учетных данных из конфигурации. Другой исходный код позволяет настроить сервер развертывания с помощью профилей Maven или даже файлов свойств. Убедитесь, что настройки Maven правильны для развертывания Artifactory, а также мы настроили процесс сборки Maven. Установите переменную окружения MAVEN_OPTS так, чтобы в Maven было достаточно памяти, а постоянная генерация была достаточно высокой, чтобы избежать исключений нехватки памяти во время компиляции.
|
1
|
MAVEN_OPTS=-Xmx1024m -Xms256m -XX:MaxPermSize=512m -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled |
Если у вас есть 16 ГБ ОЗУ, почему бы не использовать ее полностью для компиляции всего GlassFish? Алгоритм сбора мусора изменен на параллельный алгоритм метки и очистки, и мы также включили разрешенную выгрузку классов. Вы готовы к компиляции, введя следующие команды:
|
1
2
3
4
|
cd glassfish-mainsvn updatemvn cleanmvn install -DskipTests=true |
Приготовьте себе горячий напиток и перекусите около 20 минут на приличном процессоре Intel Core i5 / i7 (2012). Перерыв. Обратите внимание, что мы избегаем здесь запускать модульные тесты, мы пропускаем тесты, потому что мы просто хотим быстро получить рабочий релиз в репо, что не означает, что тестирование плохое. После успешной компиляции всех модулей, теперь вы готовы к развертыванию в частном репозитории Maven. Если вы выполнили предыдущую инструкцию о копировании раздела в отдельные файлы POM, вы можете выполнить эту команду из root.
|
1
2
|
cd glassfish-mainmvn deploy -DskipTests=true |
После развертывания артефактов в Artifactory проверьте хранилище на наличие моментального снимка версии 4.0, все они должны быть там. Теперь перейдите в папку проекта Java EE. glassfish-main/appserver/javaee-api/javax.javaee-api/pom.xml POM-файл: glassfish-main/appserver/javaee-api/javax.javaee-api/pom.xml . В разделе сборки отсутствует исходный плагин maven, и поэтому по умолчанию он не создает JAR-файл источника, что полезно для просмотра новых API JavaEE 7! Найдите project/build/plugins XPath project/build/plugins и добавьте следующий раздел к этому POM.
|
01
02
03
04
05
06
07
08
09
10
11
12
13
|
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-source-plugin</artifactId> <executions> <execution> <id>attach-sources</id> <phase>package</phase> <goals> <goal>jar-no-fork</goal> </goals> </execution> </executions></plugin> |
Выполните следующую командную строку, чтобы развернуть артефакты API Java EE
|
1
2
|
cd glassfish-main/appserver/javaeemvn deploy -DskipTests=true |
По какой-то причине основное выполнение не устанавливает артефакты javax.javaee-api автоматически. Выполнение этой строки создает JAR и JAR SOURCES для трех базовых модулей: javax.javaee-api , javax.javaee-web-api и javax.javaee-endorsed-api . Зайдите в Артефактуру и увидите, что все артефакты развернуты. Затем вы можете написать файл сборки Gradle следующим образом:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
repositories { maven { credentials { username 'administrator' password 'passowrd' } } maven { } maven { }}dependencies { providedCompile 'org.glassfish.main.extras:glassfish-embedded-all:4.0-SNAPSHOT' providedCompile 'javax:javaee-api:7.0-bpeter-private' providedCompile 'javax:javaee-web-api:7.0-bpeter-private' compile 'org.glassfish.main.extras:glassfish-embedded-all:4.0-SNAPSHOT' compile 'javax:javaee-api:7.0-bpeter-private' testCompile 'junit:junit:4.10'} |
Особенно обратите внимание, что версия сборки 7.0-bpeter-private как 7.0-bpeter-private . Последний фрагмент головоломки, который я еще не разработал, — это настройка build.id Maven build.id чтобы я мог настроить номер сборки. Это все еще загадка. Если вам случится знать ответ, пожалуйста, позвоните мне. Ура!
Ссылка: Создайте снимки GlassFish 4.0 от нашего партнера JCG Питера Пилигрима в блоге Питера Пилигрима .