Является ли хорошей практикой определение объема зависимостей в спецификации Maven (спецификация)?
У меня есть pom.xml
как это будет использоваться в качестве спецификации (ведомости материалов). Одна из определенных зависимостей является *-test
Артефакт, используемый для тестирования вашего кода, который использует библиотеки из этой спецификации.
Вопрос в следующем: уместно ли / хорошая практика указывать, что *-test
Артефакт только для test
область действия в самой спецификации, или ее следует оставить для пользователей спецификации, чтобы указать в POM своего проекта, если это необходимо?
<?xml version="1.0" encoding="UTF-8"?>
<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.example.mylib</groupId>
<artifactId>mylib-bom</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>pom</packaging>
<name>MyLib (Bill of Materials)</name>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.example.mylib</groupId>
<artifactId>mylib-cool-library</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.example.mylib</groupId>
<artifactId>mylib-test</artifactId>
<version>${project.version}</version>
<scope>test</scope> <!-- === HERE === -->
</dependency>
</dependencies>
</dependencyManagement>
</project>
Я смотрел на то, как существующие проекты делают это, и, например, спецификация Spring Framework, действительно, не определяет какую-либо область явно. Но мне все еще интересно, есть ли какое-то неписаное правило для этого или что-то подобное?
1 ответ
Рекомендуется разрешать пользователю выбирать область действия, а не устанавливать ее в спецификации (или родительском помпе).
Когда вы устанавливаете область действия в спецификации, вы изменяете область действия по умолчанию для этой зависимости, как видно из пользовательских проектов. Область зависимостей по умолчанию в maven: compile
, поэтому обычной практикой является пропуск области для зависимости, когда вы хотите, чтобы она была скомпилирована. Если спецификация налагает другую область, это может стать неприятным сюрпризом для других разработчиков, которые используют эту спецификацию (или даже самих себя в более поздний момент времени).