Мейвен велик. В основном это избавляет меня от адской зависимости jar, указывая версии зависимых пакетов в конфигурации pom
и применяет их автоматически. Он также имеет большую интеграцию с Eclipse через m2e, так что все работает без проблем в среде IDE.
Все это отлично подходит для зависимостей, которые во всем мире известны Maven. Однако иногда есть библиотеки, которые необходимо включить в проект, который недоступен в репозиториях Maven. В этом случае я обычно добавляю их в каталог lib/
в моем проекте. Пока они находятся в пути к классам, тогда компилируются вещи.
Однако проблема заключается в том, что они автоматически включаются при импорте проекта. Я слишком долго терпел эту проблему с искушенными исправлениями и хаками слишком долго. Каждый раз, когда кто-то устанавливает этот проект, я должен сказать им вручную добавить банки в lib/
к их пути сборки Eclipse, чтобы все ошибки исчезли. Что-то вроде следующего:
Я ищу способ автоматизации этого процесса таким образом, который работает как с программой командной строки mvn
, так и с Eclipse: больше внимания уделяется Eclipse, потому что хорошо иметь проекты, которые просто компилируются при импорте.
Я не хочу настраивать сервер репо для этого, и у меня нет каких-либо собственных компонентов, которые гарантировали бы локальную настройку. У меня просто есть файлы jar, где разработчики не используют Maven; и я хочу с ними скомпилировать... Я должен просто включить их в дистрибутив моего программного обеспечения, верно?
Я действительно ищу разумный способ реализовать это, что также будет работать в Eclipse без суеты. Это одно из решений. Я нашел многообещающий, но там определенно не кажется авторитетным решением этой проблемы. Единственное, что подходит, это maven-addjars-plugin, который работает нормально, но только в командной строке. Этот плагин неплох и имеет довольно разумную конфигурацию:
<plugin>
<groupId>com.googlecode.addjars-maven-plugin</groupId>
<artifactId>addjars-maven-plugin</artifactId>
<version>1.0.5</version>
<executions>
<execution>
<goals>
<goal>add-jars</goal>
</goals>
<configuration>
<resources>
<resource>
<directory>${project.basedir}/lib/java-aws-mturk</directory>
</resource>
<resource>
<directory>${project.basedir}/lib/not-in-maven</directory>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
Однако попытка заставить его запускать в Eclipse включает добавление следующего беспорядка в сопоставление жизненного цикла вашего pom.xml
, который я никогда не получал, чтобы работать; Я даже не думаю, что он настроен на то, чтобы фактически добавить что-либо в путь сборки Eclipse.
<pluginManagement>
<plugins>
<!--This plugin configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.-->
<plugin>
<groupId>org.eclipse.m2e</groupId>
<artifactId>lifecycle-mapping</artifactId>
<version>1.0.0</version>
<configuration>
<lifecycleMappingMetadata>
<pluginExecutions>
<pluginExecution>
<pluginExecutionFilter>
<groupId>
com.googlecode.addjars-maven-plugin
</groupId>
<artifactId>
addjars-maven-plugin
</artifactId>
<versionRange>
[1.0.5,)
</versionRange>
<goals>
<goal>add-jars</goal>
</goals>
</pluginExecutionFilter>
<action>
<execute />
</action>
</pluginExecution>
</pluginExecutions>
</lifecycleMappingMetadata>
</configuration>
</plugin>
</plugins>
</pluginManagement>
1) вы можете использовать зависающую область системы
<dependency>
<groupId>test</groupId>
<artifactId>x</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${basedir}/lib/x.jar</systemPath>
</dependency>
2) вы можете скопировать x.jar в локальный репозиторий maven как
репозиторий/тест/х/1,0/х-1.0.jar
и добавьте зависимость как
<dependency>
<groupId>test</groupId>
<artifactId>x</artifactId>
<version>1.0</version>
</dependency>
Вы можете использовать maven для установки файлов из папки project\lib в локальное репо с помощью maven-install-plugin, как показано ниже. Я сделал это раньше с драйверами JDBC. Возможно, вам придется создать отдельный pom для него и выполнить его с помощью mvn -f installdeps.pom или что-то в этом роде.
Если вы можете заставить его играть красиво и привязаться к жизненному циклу, например, проверять или что-то еще, то вы можете использовать плагин m2e с Eclipse, и он просто может играть хорошие и читать зависимости прямо из pom.xml и устанавливать банки как необходимо для локального репо.
<plugin>
<!-- We dont want children attempting to install these jars to the repo. -->
<inherited>false</inherited>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<executions>
<execution>
<id>Microsoft JDBC Driver File 1</id>
<phase>install</phase>
<goals>
<goal>install-file</goal>
</goals>
<configuration>
<file>lib/sqljdbc4.jar</file>
<groupId>com.microsoft</groupId>
<artifactId>microsoft-jdbc-driver</artifactId>
<version>4.0</version>
<packaging>jar</packaging>
</configuration>
</execution>
<execution>
<id>ojdbc5</id>
<phase>install</phase>
<goals>
<goal>install-file</goal>
</goals>
<configuration>
<file>lib/ojdbc5.jar</file>
<groupId>com.oracle</groupId>
<artifactId>ojdbc5</artifactId>
<version>11.1.2</version>
<packaging>jar</packaging>
</configuration>
</execution>
</executions>
</plugin>
Мне кажется, что вы можете использовать Maven Resource Plugin, чтобы сделать это за вас. Просто привяжите копирование ресурсов к соответствующей фазе жизненного цикла (фаза до компиляции). Скорее всего, вам нужно будет настроить плагин maven-compiler, чтобы эти библиотеки находились в пути к классам при компиляции и во время выполнения.