Я использую плагин блока знатока для создания банки моего приложения, включая его зависимости следующим образом:
<assembly>
<id>macosx</id>
<formats>
<format>tar.gz</format>
<format>dir</format>
</formats>
<dependencySets>
<dependencySet>
<includes>
<include>*:jar</include>
</includes>
<outputDirectory>lib</outputDirectory>
</dependencySet>
</dependencySets>
</assembly>
(Я опустил некоторый другой материал, который не связан с вопросом),
До сих пор это хорошо работало, потому что это создает a lib
каталог со всеми зависимостями. Однако я недавно добавил новую зависимость, объем которой system
, и это не копирует его в lib
выходной каталог. я должен пропускать что-то основное здесь, таким образом, я зову на помощь.
Зависимость, которую я просто добавил:
<dependency>
<groupId>sourceforge.jchart2d</groupId>
<artifactId>jchart2d</artifactId>
<version>3.1.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/external/jchart2d-3.1.0.jar</systemPath>
</dependency>
Единственным путем я смог включать эту зависимость, был путем добавления следующего к элементу блока:
<files>
<file>
<source>external/jchart2d-3.1.0.jar</source>
<outputDirectory>lib</outputDirectory>
</file>
</files>
Однако это вынуждает меня изменить англичанина и файл блока каждый раз, когда эта банка переименована, если когда-либо. Кроме того, это кажется просто неправильным.
Я попробовал <scope>runtime</scope>
в dependencySets
и <include>sourceforge.jchart2d:jchart2d</include>
без удачи.
Таким образом, как Вы включаете a system
ограниченная по объему банка в Ваш файл блока в знатоке 2?
Большое спасибо
Я не удивляюсь, что зависимости системы не добавляются (в конце концов, зависимости с системной областью должны быть явно предоставляться по определению). На самом деле, если вы действительно не хотите помещать эту зависимость в местном хранилище (например, потому, что вы хотите распространить его как часть вашего проекта), это то, что я бы сделал:
Я бы объявил этот репозиторий в моем Pom.xml
, как это:
<Репозитории>
<Репозиторий>
Мой ID>
Файл: // $ {bustiр} / my-repo url>
Репозиторий>
Репозитории>
Я бы просто объявил артефакт без программы
, это просто источник неприятностей:
<Зависимость>
sourceforge.jchart2d groupid>
jChart2D Artifactid>
<Версия> 3.1.0 версия>
зависимость>
Я не на 100% уверен, что это подойдет вашим потребностям, но я думаю, что это лучшее решение, чем использование системы System.
Обновление: Я должен был упомянуть, что в моем первоначальном ответе, и я сейчас исправляю. Чтобы установить стороннюю библиотеку в файловом репозитории, используйте Установить: Установить-файл
с параметром PlocalReposityPath
:
mvn install:install-file -Dfile=<path-to-file> \
-DgroupId=<myGroup> \
-DartifactId=<myArtifactId> \
-Dversion=<myVersion> \
-Dpackaging=<myPackaging> \
-DlocalRepositoryPath=<path-to-my-repo>
Вы можете вставить это как в оболочке * NIX Отказ В Windows удалите « \
и положите все на одну строку.
Кстати, вы можете автоматизировать его и сделать частью вашей сборки maven. Следующий код установит ваш jar-файл в ваш локальный репозиторий перед компиляцией:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<executions>
<execution>
<id>hack-binary</id>
<phase>validate</phase>
<configuration>
<file>${basedir}/lib/your-lib.jar</file>
<repositoryLayout>default</repositoryLayout>
<groupId>your-group</groupId>
<artifactId>your-artifact</artifactId>
<version>0.1</version>
<packaging>jar</packaging>
<generatePom>true</generatePom>
</configuration>
<goals>
<goal>install-file</goal>
</goals>
</execution>
</executions>
</plugin>