Apache Maven

Поделись знанием:
Перейти к: навигация, поиск
Apache Maven
Тип

Автоматизация сборки

Разработчик

Apache Software Foundation

Написана на

Java[1]

Операционная система

Кроссплатформенное программное обеспечение

Лицензия

Apache 2.0 License

Сайт

[maven.apache.org/ pache.org]

К:Википедия:Статьи без изображений (тип: не указан)

Apache Maven — фреймворк для автоматизации сборки проектов на основе описания их структуры в файлах на языке POM (англ. Project Object Model), являющемся подмножеством XML[2]. Проект Maven издаётся сообществом Apache Software Foundation, где формально является частью Jakarta Project.

Название программы, maven, — является словом из языка идиш, смысл которого можно примерно выразить как «собиратель знания»[3].

Maven обеспечивает декларативную, а не императивную (в отличие от средства автоматизации сборки Apache Ant) сборку проекта. В файлах описания проекта содержится его спецификация, а не отдельные команды выполнения. Все задачи по обработке файлов, описанные в спецификации, Maven выполняет посредством их обработки последовательностью встроенных и внешних плагинов.

Maven используется для построения и управления проектами, написанными на JavaC#RubyScala, и других языках[4].





История разработки

Maven был создан канадцем Джейсоном ван Зилом (Jason van Zyl) и организованной им фирмой Sonatype. Он начался как подпроект Apache Turbine в 2002 г.. В 2003 году Maven был квалифицирован как Apache-проект верхнего уровня, тогда же появилась его первая версия — Maven 1.x. Она была опубликована 13-го июля 2004 как версия 1.0. Это происходило, однако, так быстро, что некоторые частности оказались непродуманными. Например, слишком много конфигурации, проблемы с производительностью.

Поэтому концепция была доработана и с 2005-го года началась параллельная разработка Maven 2.x, которая была сдана в версии 2.0 19-го октября 2005-го года.[5]

Maven 1.x не разрабатывается дальше и ограничивается поддержкой пользователей и устранением ошибок.[6]

Разработка Maven 3.0 началась в 2008 г.. После восьми альфа-релизов, первая бета-версия Maven 3.0 была опубликована в октябре 2010 г. Особенное внимание было уделено её обратной совместимости с Maven 2. Для большинства проектов переход от версии Maven 2 к версии Maven 3 не требует никаких изменений[7].

Разработка Maven происходит в следующих подпроектах:

  • Maven 1.x и Maven 2.x — старые версии Maven-а.
  • Maven 3.x развивает текущую линию продуктов Maven[7].
  • Plugins разрабатывает большинство Maven-плагинов.
  • Shared Components изготовляет компоненты программного обеспечения, которые могут использоваться всеми другими подпроектами.
  • Ant Tasks позволяет использовать возможности Ant из Maven.
  • Doxia это фреймворк для генерации контента из форматов Almost Plain Text (APT), Confluence, DocBook, FML (FAQ Markup Language), LaTeX, Rich Text Format (RTF), TWiki, XDoc и XHTML.
  • SCM (Source Code Management) разрабатывает программное обеспечение для подключения Apache к различным системам версионирования как CVS или Subversion.
  • Surefire разрабатывает тест-фреймворк для Maven-а.
  • Wagon готовит абстракцию коммуникационных протоколов как «доступ к файлам», HTTP или FTP.

Объектная Модель описания проекта. Файл pom.xml

Информация для сборки проекта, поддерживаемого Apache Maven, содержится в XML-файле с названием pom.xml. При запуске Maven проверяет, содержит ли конфигурационный файл все необходимые данные и все ли данные синтаксически правильно записаны.

Пример файла pom.xml:

<project>
  <!-- версия модели для POM-ов Maven 2.x всегда 4.0.0 -->
  <modelVersion>4.0.0</modelVersion>
  
  <!-- координаты проекта, то есть набор значений, который
       позволяет однозначно идентифицировать этот проект -->
  
  <groupId>com.mycompany.app</groupId>
  <artifactId>my-app</artifactId>
  <version>1.0</version>

  <!-- зависимости от библиотек -->
  
  <dependencies>
    <dependency>
    
      <!-- координаты необходимой библиотеки -->
      
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      
      <!-- эта библиотека используется только для запуска и компилирования тестов -->
      
      <scope>test</scope>
      
    </dependency>
  </dependencies>
</project>

Минимальная конфигурация включает версию конфигурационного файла, имя проекта, его автора и версию[8]. С помощью pom.xml конфигурируются зависимости от других проектов, индивидуальные фазы процесса построения проекта (build process), список плагинов, реализующих порядок сборки[8].

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

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

Основные концепции

Cоглашения по конфигурации

Maven поддерживает принцип Convention over configuration (англ.)(рус. соглашения по конфигурации), заключающийся в том, что рассматриваемые аспекты нуждаются в конфигурации тогда и только тогда, когда этот аспект не удовлетворяет некоторой спецификации. Как следствие, это позволяет сократить количество требуемой конфигурации без потери гибкости. Одним из следствий применения данного принципа является то, что отсутствует необходимость указывать пути к файлам в явном виде, что упрощает содержимое pom.xml. Однако, почти все стандарты, на которые опирается Maven, могут быть изменены индивидуальной конфигурацией[10][11].

Архетипы

Maven использует принцип Maven-архетипов (англ. Archetypes). Архетип — это инструмент шаблонов, каждый из которых определён паттерном или моделью, по аналогии с которой создаются производные.[12]

Стандартная структура каталогов — одна из реализаций принципа архетипов в Maven. Следующая структура показывает важнейшие каталоги для проекта на Java[13]:

  • Корневой каталог проекта: файл pom.xml и все дальнейшие подкаталоги
    • src: все исходные файлы
      • src/main: исходные файлы собственно для продукта
        • src/main/java: Java-исходный текст
        • src/main/resources: другие файлы, которые используются при компиляции или исполнении, например Properties-файлы
      • src/test: исходные файлы, необходимые для организации автоматического тестирования
        • src/test/java: JUnit-тест-задания для автоматического тестирования
    • target: все создаваемые в процессе работы Мавена файлы
      • target/classes: компилированные Java-классы

Жизненный цикл

Жизненный цикл Maven проекта — это список поименованных фаз, определяющий порядок действий при его построении. Жизненный цикл Maven содержит три независимых порядка выполнения:[14]

  • clean — жизненный цикл для очистки проекта. Содержит следующие фазы:
    1. pre-clean
    2. clean
    3. post-clean
  • default — основной жизненный цикл, содержащий следующие фазы:
    1. validate - выполняется проверка, является ли структура проекта полной и правильной.
    2. generate-sources
    3. process-sources
    4. generate-resources
    5. process-resources
    6. compile - компилируются исходные тексты.
    7. process-test-sources
    8. process-test-resources
    9. test-compile
    10. test - собранный код тестируется заранее подготовленным набором тестов.
    11. package - упаковка откомпилированных классов и прочих ресурсов. Например, в JAR-файл.
    12. integration-test - программное обеспечение в целом или его крупные модули подвергаются интеграционному тестированию. Проверяется взаимодействие между составными частями программного продукта.
    13. install - установка программного обеспечения в локальный Maven-репозиторий, чтобы сделать его доступным для других проектов текущего пользователя.
    14. deploy - стабильная версия программного обеспечения распространяется на удаленный Maven-репозиторий, чтобы сделать его доступным для других пользователей.
  • site — жизненный цикл генерации проектной документации. Состоит из фаз:
    1. pre-site
    2. site
    3. post-site
    4. site-deploy

Стандартные жизненные циклы могут быть дополнены функционалом с помощью Maven-плагинов. Плагины позволяют вставлять в стандартный цикл новые шаги (например, распределение на сервер приложений) или расширять существующие шаги.

Архитектура

Maven базируется на plugin-архитектуре, которая позволяет применять плагины для различных задач (compile, test, build, deploy, checkstyle, pmd, scp-transfer) для данного проекта, без необходимости их в явном виде инсталлировать. Это возможно за счет того, что информация поступает плагину через стандартный вход, а результаты пишутся в его стандартный выход. Теоретически, это позволяет кому угодно писать плагины для взаимодействия со средствами построения проекта (компиляторы, средства тестирования, и т. п.) для любого другого языка. В реальности, поддержка других языков кроме Java сейчас минимальна. Существует плагин для .NET-фреймворка[15], а также плагины для C/C++ [16][17].

Количество доступных плагинов в настоящее время очень велико и включает, в том числе, плагины, позволяющие непосредственно из Maven запускать web-приложение для тестирования его в браузере; плагины, позволяющие тестировать или создавать банки данных; плагины, позволяющие генерировать Web Services. Задачей разработчика в такой ситуации является найти и применить наиболее подходящий набор плагинов.

Плагин обеспечивает достижение ряда целей с помощью следующего синтаксиса:

 mvn [имя плагина]:[имя цели]

Например, Java-проект может быть скомпилирован плагином-компилятором[18] путём выполнения команды: mvn compiler:compile

Существуют Maven-плагины для построения, тестирования, контроля исходного текста, запуска web-сервера, генерации Eclipse-проектных файлов и множество других.[19] Плагины перечисляются и конфигурируются в секции <plugins> файла pom.xml. Некоторая базовая группа плагинов включается в каждый проект по умолчанию.

Зависимости

В файле pom.xml задаются зависимости, которые имеет управляемый с помощью Maven проект. Менеджер зависимостей основан на нескольких основных принципах:

  • Репозитории. Maven ищет необходимые файлы в локальных каталогах или в локальном Maven-репозитории. Если зависимость не может быть локально разрешена, Maven подключается к указанному Maven-репозиторию в сети и копирует в локальный репозиторий. По умолчанию Maven использует Maven Central Repository[20], но разработчик может конфигурировать и другие публичные Maven-репозитории, такие, как Apache, Ibiblio, Codehaus или Java.Net.
  • Транзитивные зависимости. Необходимые библиотеки подгружаются в проект автоматически. При разрешении конфликта версий используется принцип «ближайшей» зависимости, то есть выбирается зависимость, путь к которой через список зависимых проектов является наиболее коротким.
  • Исключение зависимостей. Файл описания проекта предусматривает возможность исключить зависимость в случае обнаружения цикличности или отсутствия необходимости в определённой библиотеке.
  • Поиск зависимостей. Поиск зависимостей (open-source-библиотек и модулей) ведётся по их координатам (groupId, artifactId и version). Эти координаты могут быть определены с помощью специальных поисковых машин, например, Maven search engine[21]. Например, по поисковому признаку «pop3», поисковая машина предоставляет результат с groupId="com.sun.mail" и artifactId="pop3".
  • Менеджеры репозиториев. Репозитории реализуются с помощью менеджеров репозиториев Maven (Maven Repository Manager), таких как Apache Archiva, Nexus (ранее Proximity), Artifactory, Codehaus Maven Proxy или Dead Simple Maven Proxy[22].

Область распространения зависимости позволяет включать зависимости только на определённую стадию построения проекта. Существует 6 возможных областей:[23]

  1. compile. Область по умолчанию. Зависимость доступна во всех путях поиска классов в проекте. Распространяется на зависимые проекты.
  2. provided. Область аналогична compile, за исключением того, что JDK или контейнер сам предоставит зависимость во время выполнения программы.
  3. runtime. Зависимость не нужна для компиляции, но нужна для выполнения.
  4. test. Зависимость не нужна для нормальной работы приложения, а нужна только для компиляции и запуска тестов.
  5. system. Область аналогична provided за исключением того, что содержащий зависимость JAR указывается явно. Артефакт не ищется в репозитории.
  6. import (начиная с версии Maven 2.0.9) используется только с зависимостью типа pom в секции <dependencyManagement>. Зависимости текущего POM заменяются на зависимости из указанного POM.

Приведение проекта к виду Maven

Проект, поддерживающийся с помощью Maven, должен удовлетворять некоторым условиям для возможности его чтения утилитой, последующего анализа и возможности сборки. Это накладывает некоторые ограничения на структуру директорий и требует дополнительных действий, если проект изначально имеет отличную структуру.[24]

Для того, чтобы Maven распознал проект, как подлежащий обработке, он должен содержать установленную структуру каталогов. Все файлы с исходным кодом должны находиться по относительному пути «\src\main\java»[13].

Файл конфигурации web-проекта web.xml должен находиться в директории «\src\main\webapp\WEB-INF».[13]

Файл конфигурации Maven-проекта pom.xml должен находиться в корневом каталоге проекта. В нём согласно его предназначению могут быть указаны удаленный репозиторий, плагины для создания архивов, плагин компилятора и прочее. Для web-проекта также необходимо добавлять дополнительные зависимости, как например javaee.jar.

Таким образом, выходной файл конфигурации web-проекта, согласованный с Maven, выглядит следующим образом:
<project xmlns="maven.apache.org/POM/4.0.0" 
      xmlns:xsi="www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="maven.apache.org/POM/4.0.0 maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.mkyong</groupId>
  <artifactId>servletdemo</artifactId>
  <packaging>war</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>servletdemo</name>
  <url>maven.apache.org</url>

  <repositories>
    <repository>
      <id>java.net</id>
      <url>download.java.net/maven/2</url>
    </repository>
  </repositories>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <configuration>
          <webResources>
            <resource>
              <directory>${basedir}/src/main/java</directory>
              <targetPath>WEB-INF/classes</targetPath>
              <includes>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
                <include>**/*.css</include>
                <include>**/*.html</include>
              </includes>
            </resource>
          </webResources>
        </configuration>
      </plugin>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <source>1.6</source>
          <target>1.6</target>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>
После выполнения всех указанных требований Maven-проект готов для выполнения фаз жизненного цикла, таких, как компиляция, сборка архива и генерация документации[25].

Пример выходного лога сообщений при выполнении команды mvn war:war :

E:\workspace\servletdemo>mvn war:war
[INFO] Scanning for projects...
.......
[INFO] Processing war project
[INFO] Copying webapp resources[E:\workspace\servletdemo]
[INFO] Webapp assembled in[47 msecs]
[INFO] Building war: E:\workspace\servletdemo\target\servletdemo-1.0-SNAPSHOT.war
[INFO] -----------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] -----------------------------------------------

Взаимодействие со средами разработки

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

Эти плагины обеспечивают также возможность удобно редактировать POM или использовать POM для полного описания зависимостей проекта для нужд используемого IDE.

Напишите отзыв о статье "Apache Maven"

Примечания

  1. [freshmeat.net/projects/maven Jakarta Turbine Maven | freshmeat.net]
  2. maven.apache.org/guides/introduction/introduction-to-the-pom.html/ POM
  3. [maven.apache.org/what-is-maven.html Maven — What is Maven?]
  4. Apache Maven Community. [maven.apache.org/plugins/maven-compiler-plugin/ Apache Maven Compiler Plugin]. Apache Maven Project.
  5. [archive.apache.org/dist/maven/binaries/ Исторический архив версий Maven]
  6. [maven.apache.org/maven-1.x/index.html Официальная страница Maven 1.x]
  7. 1 2 Apache Maven Foundation. [maven.apache.org/docs/history.html Maven Releases History]. Apache Maven Docs.
  8. 1 2 Apache Foundations. [maven.apache.org/guides/introduction/introduction-to-the-pom.html#Minimal_POM Минимальное содержание POM файла]. Apache Maven Project.
  9. [maven.apache.org/guides/introduction/introduction-to-the-pom.html#Super_POM Super POM]
  10. [books.sonatype.com/mvnex-book/pdf/mvnex-pdf.pdf Maven by Example]
  11. [codehelper.ru/questions/224/new/%D1%87%D1%82%D0%BE-%D1%82%D0%B0%D0%BA%D0%BE%D0%B5-convention-over-configuration Что такое Convention over Configuration?]
  12. Apache Maven Foundation. [maven.apache.org/guides/introduction/introduction-to-archetypes.html Документация Maven. Архитипы.].
  13. 1 2 3 [maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html Официальная страница Apache Maven: структура каталогов]
  14. [maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html#Lifecycle_Reference Maven Build Lifecycle Reference]
  15. [doodleproject.sourceforge.net/mavenite/dotnet-maven-plugin/index.html .NET Maven Plugin]
  16. [www.mojohaus.org/maven-native/native-maven-plugin/ Native Maven Plugin]
  17. [maven-nar.github.io/index.html NAR plugin]
  18. [maven.apache.org/plugins/maven-compiler-plugin/ Maven Compiler Plugin]
  19. [maven.apache.org/plugins/index.html Maven — Доступные плагины]
  20. [search.maven.org/ Maven Central Repository]
  21. [search.maven.org/ Maven search engine]
  22. [docs.codehaus.org/display/MAVENUSER/Maven+Repository+Manager+Feature+Matrix Таблица сравнения]
  23. Apache Maven Foundation. [maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html Maven Documentation. Введение в механизм зависимостей].
  24. [www.mkyong.com/maven/how-to-convert-java-web-project-to-maven-project/ Как преобразовать web-проект к Maven-проекту]
  25. Apache Foundation. [maven.apache.org/run-maven/index.html Building a Project with Maven]. Apache Maven Documentation.
  26. [www.emacswiki.org/emacs/MalabarMode#toc7 EmacsWiki: Malabar Mode]

См. также

Ссылки

  • [maven.apache.org/ Официальный сайт проекта]  (англ.)
  • [maven.apache.org/guides/introduction/introduction-to-the-pom.html Introduction to the POM] (англ.)
  • [maven.apache.org/ref/current/maven-model/maven.html POM 4.0 Reference] (англ.)
  • [www.apache-maven.ru/ Информация о Apache Maven на русском языке] (рус.)
  • Murali Kashaboina; Geeth Narayanan. [eclipse.sys-con.com/node/393300 An Introduction to Maven] (англ.). «Eclipse Developer's Journal» (3 июля 2007). Проверено 14 октября 2008. [www.webcitation.org/65oiPb7pY Архивировано из первоисточника 29 февраля 2012].
  • Синг Ли. [www.ibm.com/developerworks/ru/edu/j-mavenv2/ Введение в Apache Maven 2] (рус.). «IBM developerWorks Россия» (25 июня 2006). Проверено 14 октября 2008. [www.webcitation.org/65oiQs92g Архивировано из первоисточника 29 февраля 2012].
  • Нил Санче. [www.ibm.com/developerworks/ru/library/os-ag-ejbweb/ Погружение в EJB Web-приложения с Geronimo] (рус.). «IBM developerWorks Россия» (19 июля 2007). — Совместное применение Maven, Struts и XDoclet. Проверено 14 октября 2008. [www.webcitation.org/65oiRY48q Архивировано из первоисточника 29 февраля 2012].
  • Алексей Литвинюк. [msk.nestor.minsk.by/kg/2006/31/kg63115.html Автоматизация процесса разработки Java–приложений с помощью Maven 2] (рус.). «Компьютерная газета». Проверено 4 сентября 2009. [www.webcitation.org/65oiSCx9B Архивировано из первоисточника 29 февраля 2012].
  • Выговский Леонид. [vygovskiy.com/xwiki/bin/view/Main/Artifactory+%D0%BD%D0%B0+Glassfish Установка maven-репозитория Artifactory] (рус.) (5 января 2010). — В статье дается подробная инструкция по установке maven-репозитория на сервере приложенй Glassfish или контейнере сервлетов Apache Tomcat.. Проверено 5 января 2010. [www.webcitation.org/65oiT5bCG Архивировано из первоисточника 29 февраля 2012].

Отрывок, характеризующий Apache Maven

– Ну, это еще недостаточная причина, маменька.
– Ах, Боже мой! Боже мой! Как он плох! – восклицала мать.


Когда Анна Михайловна уехала с сыном к графу Кириллу Владимировичу Безухому, графиня Ростова долго сидела одна, прикладывая платок к глазам. Наконец, она позвонила.
– Что вы, милая, – сказала она сердито девушке, которая заставила себя ждать несколько минут. – Не хотите служить, что ли? Так я вам найду место.
Графиня была расстроена горем и унизительною бедностью своей подруги и поэтому была не в духе, что выражалось у нее всегда наименованием горничной «милая» и «вы».
– Виновата с, – сказала горничная.
– Попросите ко мне графа.
Граф, переваливаясь, подошел к жене с несколько виноватым видом, как и всегда.
– Ну, графинюшка! Какое saute au madere [сотэ на мадере] из рябчиков будет, ma chere! Я попробовал; не даром я за Тараску тысячу рублей дал. Стоит!
Он сел подле жены, облокотив молодецки руки на колена и взъерошивая седые волосы.
– Что прикажете, графинюшка?
– Вот что, мой друг, – что это у тебя запачкано здесь? – сказала она, указывая на жилет. – Это сотэ, верно, – прибавила она улыбаясь. – Вот что, граф: мне денег нужно.
Лицо ее стало печально.
– Ах, графинюшка!…
И граф засуетился, доставая бумажник.
– Мне много надо, граф, мне пятьсот рублей надо.
И она, достав батистовый платок, терла им жилет мужа.
– Сейчас, сейчас. Эй, кто там? – крикнул он таким голосом, каким кричат только люди, уверенные, что те, кого они кличут, стремглав бросятся на их зов. – Послать ко мне Митеньку!
Митенька, тот дворянский сын, воспитанный у графа, который теперь заведывал всеми его делами, тихими шагами вошел в комнату.
– Вот что, мой милый, – сказал граф вошедшему почтительному молодому человеку. – Принеси ты мне… – он задумался. – Да, 700 рублей, да. Да смотри, таких рваных и грязных, как тот раз, не приноси, а хороших, для графини.
– Да, Митенька, пожалуйста, чтоб чистенькие, – сказала графиня, грустно вздыхая.
– Ваше сиятельство, когда прикажете доставить? – сказал Митенька. – Изволите знать, что… Впрочем, не извольте беспокоиться, – прибавил он, заметив, как граф уже начал тяжело и часто дышать, что всегда было признаком начинавшегося гнева. – Я было и запамятовал… Сию минуту прикажете доставить?
– Да, да, то то, принеси. Вот графине отдай.
– Экое золото у меня этот Митенька, – прибавил граф улыбаясь, когда молодой человек вышел. – Нет того, чтобы нельзя. Я же этого терпеть не могу. Всё можно.
– Ах, деньги, граф, деньги, сколько от них горя на свете! – сказала графиня. – А эти деньги мне очень нужны.
– Вы, графинюшка, мотовка известная, – проговорил граф и, поцеловав у жены руку, ушел опять в кабинет.
Когда Анна Михайловна вернулась опять от Безухого, у графини лежали уже деньги, всё новенькими бумажками, под платком на столике, и Анна Михайловна заметила, что графиня чем то растревожена.
– Ну, что, мой друг? – спросила графиня.
– Ах, в каком он ужасном положении! Его узнать нельзя, он так плох, так плох; я минутку побыла и двух слов не сказала…
– Annette, ради Бога, не откажи мне, – сказала вдруг графиня, краснея, что так странно было при ее немолодом, худом и важном лице, доставая из под платка деньги.
Анна Михайловна мгновенно поняла, в чем дело, и уж нагнулась, чтобы в должную минуту ловко обнять графиню.
– Вот Борису от меня, на шитье мундира…
Анна Михайловна уж обнимала ее и плакала. Графиня плакала тоже. Плакали они о том, что они дружны; и о том, что они добры; и о том, что они, подруги молодости, заняты таким низким предметом – деньгами; и о том, что молодость их прошла… Но слезы обеих были приятны…


Графиня Ростова с дочерьми и уже с большим числом гостей сидела в гостиной. Граф провел гостей мужчин в кабинет, предлагая им свою охотницкую коллекцию турецких трубок. Изредка он выходил и спрашивал: не приехала ли? Ждали Марью Дмитриевну Ахросимову, прозванную в обществе le terrible dragon, [страшный дракон,] даму знаменитую не богатством, не почестями, но прямотой ума и откровенною простотой обращения. Марью Дмитриевну знала царская фамилия, знала вся Москва и весь Петербург, и оба города, удивляясь ей, втихомолку посмеивались над ее грубостью, рассказывали про нее анекдоты; тем не менее все без исключения уважали и боялись ее.
В кабинете, полном дыма, шел разговор о войне, которая была объявлена манифестом, о наборе. Манифеста еще никто не читал, но все знали о его появлении. Граф сидел на отоманке между двумя курившими и разговаривавшими соседями. Граф сам не курил и не говорил, а наклоняя голову, то на один бок, то на другой, с видимым удовольствием смотрел на куривших и слушал разговор двух соседей своих, которых он стравил между собой.
Один из говоривших был штатский, с морщинистым, желчным и бритым худым лицом, человек, уже приближавшийся к старости, хотя и одетый, как самый модный молодой человек; он сидел с ногами на отоманке с видом домашнего человека и, сбоку запустив себе далеко в рот янтарь, порывисто втягивал дым и жмурился. Это был старый холостяк Шиншин, двоюродный брат графини, злой язык, как про него говорили в московских гостиных. Он, казалось, снисходил до своего собеседника. Другой, свежий, розовый, гвардейский офицер, безупречно вымытый, застегнутый и причесанный, держал янтарь у середины рта и розовыми губами слегка вытягивал дымок, выпуская его колечками из красивого рта. Это был тот поручик Берг, офицер Семеновского полка, с которым Борис ехал вместе в полк и которым Наташа дразнила Веру, старшую графиню, называя Берга ее женихом. Граф сидел между ними и внимательно слушал. Самое приятное для графа занятие, за исключением игры в бостон, которую он очень любил, было положение слушающего, особенно когда ему удавалось стравить двух говорливых собеседников.
– Ну, как же, батюшка, mon tres honorable [почтеннейший] Альфонс Карлыч, – говорил Шиншин, посмеиваясь и соединяя (в чем и состояла особенность его речи) самые народные русские выражения с изысканными французскими фразами. – Vous comptez vous faire des rentes sur l'etat, [Вы рассчитываете иметь доход с казны,] с роты доходец получать хотите?
– Нет с, Петр Николаич, я только желаю показать, что в кавалерии выгод гораздо меньше против пехоты. Вот теперь сообразите, Петр Николаич, мое положение…
Берг говорил всегда очень точно, спокойно и учтиво. Разговор его всегда касался только его одного; он всегда спокойно молчал, пока говорили о чем нибудь, не имеющем прямого к нему отношения. И молчать таким образом он мог несколько часов, не испытывая и не производя в других ни малейшего замешательства. Но как скоро разговор касался его лично, он начинал говорить пространно и с видимым удовольствием.
– Сообразите мое положение, Петр Николаич: будь я в кавалерии, я бы получал не более двухсот рублей в треть, даже и в чине поручика; а теперь я получаю двести тридцать, – говорил он с радостною, приятною улыбкой, оглядывая Шиншина и графа, как будто для него было очевидно, что его успех всегда будет составлять главную цель желаний всех остальных людей.
– Кроме того, Петр Николаич, перейдя в гвардию, я на виду, – продолжал Берг, – и вакансии в гвардейской пехоте гораздо чаще. Потом, сами сообразите, как я мог устроиться из двухсот тридцати рублей. А я откладываю и еще отцу посылаю, – продолжал он, пуская колечко.
– La balance у est… [Баланс установлен…] Немец на обухе молотит хлебец, comme dit le рroverbe, [как говорит пословица,] – перекладывая янтарь на другую сторону ртa, сказал Шиншин и подмигнул графу.
Граф расхохотался. Другие гости, видя, что Шиншин ведет разговор, подошли послушать. Берг, не замечая ни насмешки, ни равнодушия, продолжал рассказывать о том, как переводом в гвардию он уже выиграл чин перед своими товарищами по корпусу, как в военное время ротного командира могут убить, и он, оставшись старшим в роте, может очень легко быть ротным, и как в полку все любят его, и как его папенька им доволен. Берг, видимо, наслаждался, рассказывая всё это, и, казалось, не подозревал того, что у других людей могли быть тоже свои интересы. Но всё, что он рассказывал, было так мило степенно, наивность молодого эгоизма его была так очевидна, что он обезоруживал своих слушателей.
– Ну, батюшка, вы и в пехоте, и в кавалерии, везде пойдете в ход; это я вам предрекаю, – сказал Шиншин, трепля его по плечу и спуская ноги с отоманки.
Берг радостно улыбнулся. Граф, а за ним и гости вышли в гостиную.

Было то время перед званым обедом, когда собравшиеся гости не начинают длинного разговора в ожидании призыва к закуске, а вместе с тем считают необходимым шевелиться и не молчать, чтобы показать, что они нисколько не нетерпеливы сесть за стол. Хозяева поглядывают на дверь и изредка переглядываются между собой. Гости по этим взглядам стараются догадаться, кого или чего еще ждут: важного опоздавшего родственника или кушанья, которое еще не поспело.
Пьер приехал перед самым обедом и неловко сидел посредине гостиной на первом попавшемся кресле, загородив всем дорогу. Графиня хотела заставить его говорить, но он наивно смотрел в очки вокруг себя, как бы отыскивая кого то, и односложно отвечал на все вопросы графини. Он был стеснителен и один не замечал этого. Большая часть гостей, знавшая его историю с медведем, любопытно смотрели на этого большого толстого и смирного человека, недоумевая, как мог такой увалень и скромник сделать такую штуку с квартальным.
– Вы недавно приехали? – спрашивала у него графиня.
– Oui, madame, [Да, сударыня,] – отвечал он, оглядываясь.
– Вы не видали моего мужа?
– Non, madame. [Нет, сударыня.] – Он улыбнулся совсем некстати.
– Вы, кажется, недавно были в Париже? Я думаю, очень интересно.
– Очень интересно..
Графиня переглянулась с Анной Михайловной. Анна Михайловна поняла, что ее просят занять этого молодого человека, и, подсев к нему, начала говорить об отце; но так же, как и графине, он отвечал ей только односложными словами. Гости были все заняты между собой. Les Razoumovsky… ca a ete charmant… Vous etes bien bonne… La comtesse Apraksine… [Разумовские… Это было восхитительно… Вы очень добры… Графиня Апраксина…] слышалось со всех сторон. Графиня встала и пошла в залу.
– Марья Дмитриевна? – послышался ее голос из залы.
– Она самая, – послышался в ответ грубый женский голос, и вслед за тем вошла в комнату Марья Дмитриевна.
Все барышни и даже дамы, исключая самых старых, встали. Марья Дмитриевна остановилась в дверях и, с высоты своего тучного тела, высоко держа свою с седыми буклями пятидесятилетнюю голову, оглядела гостей и, как бы засучиваясь, оправила неторопливо широкие рукава своего платья. Марья Дмитриевна всегда говорила по русски.
– Имениннице дорогой с детками, – сказала она своим громким, густым, подавляющим все другие звуки голосом. – Ты что, старый греховодник, – обратилась она к графу, целовавшему ее руку, – чай, скучаешь в Москве? Собак гонять негде? Да что, батюшка, делать, вот как эти пташки подрастут… – Она указывала на девиц. – Хочешь – не хочешь, надо женихов искать.
– Ну, что, казак мой? (Марья Дмитриевна казаком называла Наташу) – говорила она, лаская рукой Наташу, подходившую к ее руке без страха и весело. – Знаю, что зелье девка, а люблю.
Она достала из огромного ридикюля яхонтовые сережки грушками и, отдав их именинно сиявшей и разрумянившейся Наташе, тотчас же отвернулась от нее и обратилась к Пьеру.
– Э, э! любезный! поди ка сюда, – сказала она притворно тихим и тонким голосом. – Поди ка, любезный…
И она грозно засучила рукава еще выше.
Пьер подошел, наивно глядя на нее через очки.
– Подойди, подойди, любезный! Я и отцу то твоему правду одна говорила, когда он в случае был, а тебе то и Бог велит.
Она помолчала. Все молчали, ожидая того, что будет, и чувствуя, что было только предисловие.
– Хорош, нечего сказать! хорош мальчик!… Отец на одре лежит, а он забавляется, квартального на медведя верхом сажает. Стыдно, батюшка, стыдно! Лучше бы на войну шел.
Она отвернулась и подала руку графу, который едва удерживался от смеха.
– Ну, что ж, к столу, я чай, пора? – сказала Марья Дмитриевна.
Впереди пошел граф с Марьей Дмитриевной; потом графиня, которую повел гусарский полковник, нужный человек, с которым Николай должен был догонять полк. Анна Михайловна – с Шиншиным. Берг подал руку Вере. Улыбающаяся Жюли Карагина пошла с Николаем к столу. За ними шли еще другие пары, протянувшиеся по всей зале, и сзади всех по одиночке дети, гувернеры и гувернантки. Официанты зашевелились, стулья загремели, на хорах заиграла музыка, и гости разместились. Звуки домашней музыки графа заменились звуками ножей и вилок, говора гостей, тихих шагов официантов.
На одном конце стола во главе сидела графиня. Справа Марья Дмитриевна, слева Анна Михайловна и другие гостьи. На другом конце сидел граф, слева гусарский полковник, справа Шиншин и другие гости мужского пола. С одной стороны длинного стола молодежь постарше: Вера рядом с Бергом, Пьер рядом с Борисом; с другой стороны – дети, гувернеры и гувернантки. Граф из за хрусталя, бутылок и ваз с фруктами поглядывал на жену и ее высокий чепец с голубыми лентами и усердно подливал вина своим соседям, не забывая и себя. Графиня так же, из за ананасов, не забывая обязанности хозяйки, кидала значительные взгляды на мужа, которого лысина и лицо, казалось ей, своею краснотой резче отличались от седых волос. На дамском конце шло равномерное лепетанье; на мужском всё громче и громче слышались голоса, особенно гусарского полковника, который так много ел и пил, всё более и более краснея, что граф уже ставил его в пример другим гостям. Берг с нежной улыбкой говорил с Верой о том, что любовь есть чувство не земное, а небесное. Борис называл новому своему приятелю Пьеру бывших за столом гостей и переглядывался с Наташей, сидевшей против него. Пьер мало говорил, оглядывал новые лица и много ел. Начиная от двух супов, из которых он выбрал a la tortue, [черепаховый,] и кулебяки и до рябчиков он не пропускал ни одного блюда и ни одного вина, которое дворецкий в завернутой салфеткою бутылке таинственно высовывал из за плеча соседа, приговаривая или «дрей мадера», или «венгерское», или «рейнвейн». Он подставлял первую попавшуюся из четырех хрустальных, с вензелем графа, рюмок, стоявших перед каждым прибором, и пил с удовольствием, всё с более и более приятным видом поглядывая на гостей. Наташа, сидевшая против него, глядела на Бориса, как глядят девочки тринадцати лет на мальчика, с которым они в первый раз только что поцеловались и в которого они влюблены. Этот самый взгляд ее иногда обращался на Пьера, и ему под взглядом этой смешной, оживленной девочки хотелось смеяться самому, не зная чему.
Николай сидел далеко от Сони, подле Жюли Карагиной, и опять с той же невольной улыбкой что то говорил с ней. Соня улыбалась парадно, но, видимо, мучилась ревностью: то бледнела, то краснела и всеми силами прислушивалась к тому, что говорили между собою Николай и Жюли. Гувернантка беспокойно оглядывалась, как бы приготавливаясь к отпору, ежели бы кто вздумал обидеть детей. Гувернер немец старался запомнить вое роды кушаний, десертов и вин с тем, чтобы описать всё подробно в письме к домашним в Германию, и весьма обижался тем, что дворецкий, с завернутою в салфетку бутылкой, обносил его. Немец хмурился, старался показать вид, что он и не желал получить этого вина, но обижался потому, что никто не хотел понять, что вино нужно было ему не для того, чтобы утолить жажду, не из жадности, а из добросовестной любознательности.


На мужском конце стола разговор всё более и более оживлялся. Полковник рассказал, что манифест об объявлении войны уже вышел в Петербурге и что экземпляр, который он сам видел, доставлен ныне курьером главнокомандующему.
– И зачем нас нелегкая несет воевать с Бонапартом? – сказал Шиншин. – II a deja rabattu le caquet a l'Autriche. Je crains, que cette fois ce ne soit notre tour. [Он уже сбил спесь с Австрии. Боюсь, не пришел бы теперь наш черед.]
Полковник был плотный, высокий и сангвинический немец, очевидно, служака и патриот. Он обиделся словами Шиншина.
– А затэ м, мы лосты вый государ, – сказал он, выговаривая э вместо е и ъ вместо ь . – Затэм, что импэ ратор это знаэ т. Он в манифэ стэ сказал, что нэ можэ т смотрэт равнодушно на опасности, угрожающие России, и что бэ зопасност империи, достоинство ее и святост союзов , – сказал он, почему то особенно налегая на слово «союзов», как будто в этом была вся сущность дела.
И с свойственною ему непогрешимою, официальною памятью он повторил вступительные слова манифеста… «и желание, единственную и непременную цель государя составляющее: водворить в Европе на прочных основаниях мир – решили его двинуть ныне часть войска за границу и сделать к достижению „намерения сего новые усилия“.
– Вот зачэм, мы лосты вый государ, – заключил он, назидательно выпивая стакан вина и оглядываясь на графа за поощрением.
– Connaissez vous le proverbe: [Знаете пословицу:] «Ерема, Ерема, сидел бы ты дома, точил бы свои веретена», – сказал Шиншин, морщась и улыбаясь. – Cela nous convient a merveille. [Это нам кстати.] Уж на что Суворова – и того расколотили, a plate couture, [на голову,] а где y нас Суворовы теперь? Je vous demande un peu, [Спрашиваю я вас,] – беспрестанно перескакивая с русского на французский язык, говорил он.
– Мы должны и драться до послэ днэ капли кров, – сказал полковник, ударяя по столу, – и умэ р р рэ т за своэ го импэ ратора, и тогда всэ й будэ т хорошо. А рассуждать как мо о ожно (он особенно вытянул голос на слове «можно»), как мо о ожно менше, – докончил он, опять обращаясь к графу. – Так старые гусары судим, вот и всё. А вы как судитэ , молодой человек и молодой гусар? – прибавил он, обращаясь к Николаю, который, услыхав, что дело шло о войне, оставил свою собеседницу и во все глаза смотрел и всеми ушами слушал полковника.