AspectJ собирается и выпускается с помощью Maven. На момент написания в корневой папке проекта есть Maven-обёртка,
указывающая на Maven 3.6.3, но мы будем использовать простые команды mvn
вместо ./mvnw
, предполагая, что на вашей
работной станции установлена локальная версия Maven. Вы можете легко заменить одну команду на другую.
При развертывании окончательных выпусков на Sonatype OSSRH используется плагин Nexus Staging Maven вместо плагина Maven Deploy. Это помогает создать временное хранилище для выпуска и позже разместить его на Maven Central без необходимости входа в веб-интерфейс Sonatype Nexus. Всё можно сделать из командной строки.
Снапшоты не требуют размещения в временном хранилище и отдельного выпуска, в этом случае для них подходит плагин Maven Deploy. Так что начнём с простого случая:
Чтобы опубликовать снапшот, настройте свои учетные данные в ~/.m2/settings.xml
примерно так:
<settings>
<servers>
<server>
<id>ossrh</id>
<username>USERNAME</username>
<password>PASSWORD</password>
</server>
</servers>
</settings>
Затем просто выполните:
mvn clean deploy
# ИЛИ: Если вы уже запустили тесты локально или CI-процесс на GitHub
mvn -DskipTests clean deploy
# ИЛИ: Ускорьте процесс, пропустив генерацию документации. В зависимости от вашей оболочки, вам может не потребоваться
# экранировать символ '!', чтобы деактивировать профиль 'create-docs'. В случае (Git) Bash это необходимо.
mvn -P \!create-docs -DskipTests clean deploy
```Это размещает только основные артефакты:
- AspectJ runtime `aspectjrt-[VERSION].jar`,
- AspectJ tools/compiler `aspecttools-[VERSION].jar`,
- AspectJ weaver `aspectjweaver-[VERSION].jar`,
- AspectJ matcher `aspectjmatcher-[VERSION].jar`.
AspectJ installer (`installer/target/aspectj-[VERSION].jar`) должен быть опубликован отдельно, если вы хотите сделать его доступным для публики для этого снапшота.
Чтобы использовать AspectJ снапшот, опубликованный таким образом, используйте репозиторий OSSRH в POM зависимого проекта:
```xml
<repository>
<id>ossrh</id>
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
</repository>
Выпущенные артефакты такие же, как и для снапшотов, но процедура требует нескольких дополнительных шагов. Я объясняю руководство по ручной версионированию без использования плагина Maven Release. Это может работать и с Maven Release, т.е.:
Если выпуск AspectJ также включает поддержку новой версии Java, то перед выпуском AspectJ проведите поиск термина AspectJ_JDK_Update
во всех файлах в базе кода, включая не-Java файлы. Проверьте, что вы не забыли добавить необходимую инфраструктуру или увеличить версии, как это необходимо.Чтобы показать детали и дать вам больше контроля над процессом, вы можете выполнить это пошагово следующим образом:
# Убедитесь, что вы используете JDK 16, так как генерация javadoc зависит от версии JDK
# и может вызвать неожиданные ошибки на других версиях
java -version
# java version "16" 2021-03-16 (...)
# Проверьте, что вы работаете в чистом рабочем каталоге.
# Не должно быть ни staged, ни unstaged, ни.untracked файлов.
git status
# Установите версию выпуска во всех POM
mvn versions:set -DnewVersion=1.9.8.M2
# Проверьте, что изменения POM корректны, затем удалите файлы резервных копий POM
mvn versions:commit
```# Соберите и разверните выпуск в репозитории Nexus для стадии.
# Профиль 'release' активирует:
# - плагин Maven GPG для подписи артефактов (готовьтесь ввести ваш пароль).
# На Windows, графический диалог для ввода пароля должен появиться с последней версией GnuPG.
# В случае ошибки 'Failed to execute goal org.apache.maven.plugins:maven-gpg-plugin:1.6:sign',
# попробуйте 'export GPG_TTY=$(tty)' перед выполнением команды.
# - плагин Maven Javadoc
# - плагин Nexus Staging Maven
# Профиль 'create-docs' убедится, что будут сгенерированы документы AspectJ для включения в установщик.
# По желанию, используйте '-DskipTests', если вы уже запустили все тесты.
mvn -P release,create-docs clean deploy
```Если эта команда была выполнена успешно, это означает, что мы создали временное репозиторий на Sonatype OSSRH, загрузили все артефакты
и все предварительные проверки на сервере Sonatype прошли успешно, то есть если POM-файлы содержат всю необходимую информацию и если
в сборке прикреплены артефакты исходного кода и javadoc. Теперь остался только один шаг — выпустить временное репозиторий в Maven Central. На самом деле, плагин Nexus Staging Maven также можно настроить для развертывания и выпуска в Maven Central в одном команде, но
для того чтобы дать вам возможность вручную скачать и проверить артефакты из стейджингового репозитория, по умолчанию
конфигурация плагина в родительском POM выглядит так: `<autoReleaseAfterClose>false</autoReleaseAfterClose>`. Изменение значения на`true` приведет к прямому выпуску в Maven Central, если все предыдущие шаги были выполнены успешно.Перед тем как мы выпустим стейджинговый репозиторий, мы хотим сделать коммит и тег для выпуска, а затем установить новую версию снапшота:
```shell
# Сделать коммит релизных POM в Git (лучше сделать это из вашей IDE, проверив
# изменения перед тем, как добавить их в Git для коммита)
git commit -am "Release AspectJ 1.9.8.M2"
# Добавить тег для выпуска
git tag V1_9_8_M2
# Установить новую версию снапшота, увеличив номер версии после финального выпуска
mvn versions:set -DnewVersion=1.9.8-SNAPSHOT
# Проверить, если изменения POM верны, а затем удалить файлы резервных копий POM
mvn versions:commit
# Сделать коммит снапшотов POM в Git
git commit -am "Set version to 1.9.8-SNAPSHOT"
# Отправить предыдущие коммиты на GitHub
git push origin
# Отправить тег выпуска на GitHub
git push origin V1_9_8_M2
Хорошо, домашние дела с Git завершены. Теперь, наконец, давайте насладимся плодами нашей работы и выпустим стейджинговый репозиторий в Maven Central:
# Вероятно, мы забыли записать ID стейджингового репозитория раньше.
# Он был записан где-то в логе Maven:
# [INFO] * Created staging repository with ID "orgaspectj-1106".
# [INFO] * Staging repository at https://oss.sonatype.org:443/service/local/staging/deployByRepositoryId/orgaspectj-1106
# ...
# [INFO] * Uploading locally staged artifacts to profile org.aspectj
# [INFO] * Upload of locally staged artifacts finished.
# [INFO] * Closing staging repository with ID "orgaspectj-1106".
#
# Но прокрутить вверх слишком далеко. Так что давайте просто спросим Nexus, какие стейджинговые
# репозитории есть.
mvn nexus-staging:rc-list
# [INFO] ID Состояние Описание
# [INFO] orgaspectj-1106 CLOSED org.aspectj:aspectjrt:1.9.8.M2
```# Из-за проблем в плагине Nexus Staging Maven с более новыми JDK,
# нам может потребоваться это сначала
export MAVEN_OPTS="--add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.lang.reflect=ALL-UNNAMED --add-opens=java.base/java.text=ALL-UNNAMED --add-opens=java.desktop/java.awt.font=ALL-UNNAMED"
```# Используйте ID соответствующего закрытого staging репозитория для выпуска в
# Maven Central
mvn nexus-staging:rc-release -DstagingRepositoryId=orgaspectj-1106
Та-даа! Мы выполнили выпуск AspectJ. Через несколько минут артефакты должны появиться на Maven Central где-то под https://repo1.maven.org/maven2/org/aspectj/, например, AspectJ Tools 1.9.8.M2 появится под https://repo1.maven.org/maven2/org/aspectj/aspectjtools/1.9.8.M2/. Как только вы увидите артефакты там вместо "404 not found", вы можете объявить о доступности выпуска на списке рассылки AspectJ и везде еще, где это уместно.
Наконец, не забудьте опубликовать выпуск на GitHub, прикрепив
установщик AspectJ (installer/target/aspectj-[VERSION].jar
) к нему.
eclipse-aspectj/aspectj-website. На момент написания этого текста,
есть несколько базовых PHP-страниц (которые будут перенесены в простой HTML к концу 2024 года, когда поддержка PHP истечет),
но основная часть документации проекта генерируется самим проектом AspectJ, то есть этим проектом. Содержимое asciidoc
и другие ресурсы в модуле docs
преобразуются в то, что мы хотим опубликовать на сайте. Кроме того, документация также
упаковывается в установщик AspectJ и публикуется для офлайн использования. Помимо содержимого docs
, мы также публикуем
javadocs для API runtime и weaver.После полной сборки вы можете найти сгенерированную документацию, включая javadocs, в папке aj-build/dist/docs/doc
.
Документация также прикрепляется к сборкам GitHub CI, хотя на данный момент без javadocs. Содержимое попадает в папку
doc/latest
в репозитории сайта или может попасть в папку, названную по выпуску, если мы решим это сделать в будущем.
В настоящее время мы публикуем только последнюю документацию, всегда перезаписывая предыдущую версию. Страница входа
для сгенерированной документации опубликована здесь. Убедитесь, что проверили изменения перед коммитом:
После публикации веб-сайта проведите дымовую проверку изменений, открыв несколько страниц, которые вы знаете, должны были измениться.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )