Знаток 2 блока с зависимостями: банка под объемом “система”, не включенная

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

<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?

Большое спасибо

59
задан YuppieNetworking 14 January 2010 в 17:01
поделиться

2 ответа

Я не удивляюсь, что зависимости системы не добавляются (в конце концов, зависимости с системной областью должны быть явно предоставляться по определению). На самом деле, если вы действительно не хотите помещать эту зависимость в местном хранилище (например, потому, что вы хотите распространить его как часть вашего проекта), это то, что я бы сделал:

  • Я бы поставил зависимость в «Репозиторий файловой системы» локальный в проект.
  • Я бы объявил этот репозиторий в моем Pom.xml , как это:

     <Репозитории>
      <Репозиторий>
       Мой 
       Файл: // $ {bustiр} / my-repo 
      
     
     
  • Я бы просто объявил артефакт без программы , это просто источник неприятностей:

     <Зависимость>
       sourceforge.jchart2d 
       jChart2D 
      <Версия> 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 удалите « \ и положите все на одну строку.

81
ответ дан 24 November 2019 в 18:15
поделиться

Кстати, вы можете автоматизировать его и сделать частью вашей сборки 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>
25
ответ дан 24 November 2019 в 18:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: