У меня есть projectX, который производит как его артефакт TXT-файл. Это единственный артефакт, созданный проектом. Это хорошо работает. Нет проблем.Maven: как создать проект без размножающихся отпечатков?
Проблема в том, что проекты, зависящие от этого артефакта, тянут с собой все артефакты projectX, которые, очевидно, не имеют отношения к TXT-файлу, не имеют зависимостей. Для создания файла TXT fileX, конечно, имеется ряд зависимостей, но они не имеют отношения к нисходящим проектам.
Я знаю, что могу в каждом отдельном проекте, использующем этот файл TXT, исключать эти транзитивные зависимости. Это не то, что я хочу. Я бы хотел, чтобы они были остановлены в самом проектеX, так что мне не нужно объявлять такие исключения в каждом последующем проекте.
В моем ограниченном знании Maven я думаю, мне нужно будет посмотреть параметр scope зависимостей projectX. Я ищу тип области, который говорит: «эта зависимость требуется для компиляции и выполнения проектаX, но она не является транзитивной». Невозможно найти такой объем.
Как я могу решить эту проблему, не испортив нисходящие проекты? (Те, которые используют артефакт произведенный ProjectX)
EDIT1: Мой вопрос с «при условии» рамки, что ProjectX сделан таким образом, чтобы он на самом деле выполняет себя как часть процесса сборки. По общему признанию, это необычно, но это то, что создает TXT-файл, который является истинным результатом сборки. Другими словами: зависимости ProjectX должны быть доступны не только для компиляции проектаX, но также для исполнения проектаX, но они не должны распространяться.
EDIT2:
Как я выполняю сам ProjectX в рамках своего собственного процесса сборки:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
<executions>
<execution>
<id>build-txt-file</id>
<phase>prepare-package</phase>
<goals>
<goal>exec</goal>
</goals>
<configuration>
<executable>${java.home}/bin/java</executable>
<arguments>
<argument>-classpath</argument>
<!-- automatically creates the classpath using all project dependencies, also adding the project build directory -->
<classpath/>
<argument>...</argument>
</arguments>
</configuration>
</execution>
</executions>
</plugin>
Если я объявляю DEPS ProjectX как provided
то выше шаг не будет работать.
Да и нет. «предоставлено» в порядке с точки зрения того, что Maven фактически попытается извлечь эту зависимость из репозитория (вы могли бы подумать, что «предоставлено» означало именно то, что этого не делало!) и что зависимость не является транзитивной. Но тот факт, что деп не становится частью пути класса исполнения, не идет! Это не сработает! – peterh
@ nolan6000: зачем вам это нужно во время выполнения (я предполагаю, поскольку нет пути к классу «исполнение» для моего знания) classpath, если артефакт ** только ** является TXT-файлом? Измените свой вопрос, чтобы включить эту информацию. –
Я отредактировал вопрос. – peterh