Например, если я ставлю BukkitApi jar зависимостью для проекта maven с областью depenecy, установленной для предоставления, компиляции, системы, времени выполнения или теста
В каких областях будет включен bukkitAPI в скомпилированный вывод?
Краткая версия: по умолчанию вывод maven (в target
каталоге по умолчанию) не содержит ничего, кроме скомпилированного кода для текущего проекта/модуля. То есть ничего из зависимостей.
Длинная (эр) версия: с упаковкой jar
умолчанию и без настраиваемой конфигурации фаз. вот как работает maven в проекте java:
compile
: .java
файлы в каталоге src/main/java/
скомпилируются в файлы .classes
в target
каталоге. Зависимости для области compile
загружаются в локальный репозиторий.package
: то же, что и 1, плюс вы получите файл jar
в target
каталогеinstall
: то же самое, что и 2, вы получите файл jar
в своем локальном репозитории. Итак, файлы .jar
из зависимостей ни в чем не включены по умолчанию!
Теперь, используя, например, плагин assembly
для включения зависимостей в выходе фазы package
(см. Раздел "Включение зависимостей в банку с Maven"), вы обычно получите это поведение по умолчанию:
provided
: не включеноcompile
(по умолчанию): включенаsystem
: не включенаruntime
: включеноtest
: не входитОформить эту ссылку для справки.
EDIT: просто попробуйте этот pom с различными значениями области на guice
, и вы увидите, что зависимости включены в fake-1.0-SNAPSHOT-jar-with-dependencies.jar
когда область compile
и runtime
(в этом примере нет нужны любые исходные файлы)
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.linagora</groupId>
<artifactId>fake</artifactId>
<version>1.0-SNAPSHOT</version>
<name>fake</name>
<dependencies>
<dependency>
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
<version>2.0</version>
<scope>compile</scope>
<!-- system scope needs 'systemPath' attribute as well
<systemPath>/path/to/guice/guice-3.0.jar</systemPath>
<scope>system</scope>
-->
<!-- <scope>runtime</scope> -->
<!-- <scope>test</scope> -->
<!-- <scope>provided</scope> -->
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
</plugins>
</build>
</project>
fake-1.0-SNAPSHOT-jar-with-dependencies.jar
с областью компиляции и убедитесь, что файлы guice включены.
Это не то, как работает Мейвен. Зависимости просто определяют путь к классам (для компиляции, времени выполнения, тестирования). Но зависимости не включаются в вывод по умолчанию. Вам придется отправлять все банки с зависимостями (по крайней мере, с компиляцией и временем выполнения).
Посмотрите на плагин зависимостей. Он предоставляет цели для копирования зависимостей.
Чтобы создать пакет для отправки, посмотрите на сборку плагина (например, для создания zip файла). Это даже дает возможность создать банку "все-в-одном", если это то, что вам нужно.
package
)