#maven #classpath
#maven #путь к классу
Вопрос:
pom-код внизу ниже создает файл пути к классам, содержащий все файлы jar относительно кэша maven .m2:
${M2_REPO}orgslf4jslf4j-api1.7.25slf4j-api-1.7.25.jar;${M2_REPO}comgithubjnrjnr-ffi2.1.7jnr-ffi-2.1.7.jar;...
Все зависимости аккуратно скопированы в target / lib
${project.build.directory}/lib
Интересно, как я могу заставить maven создать путь к классу, используя путь к моему целевому каталогу / lib, а не кеш maven:
target/libslf4j-api-1.7.25.jar:target/lib/jnr-ffi-2.1.7.jar :...
Я использую следующий код maven:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.0.1</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>false</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
</configuration>
</execution>
<execution>
<id>build-classpath</id>
<phase>package</phase>
<goals>
<goal>build-classpath</goal>
</goals>
<configuration>
<attach>true</attach>
<outputFile>${project.build.directory}/classpath</outputFile>
</configuration>
</execution>
</executions>
</plugin>
Комментарии:
1. В чем преимущество, если вы используете target?
2. Я хотел бы иметь конфигурацию, которая создает мой проект и размещает все зависимости в одном целевом каталоге. В настоящее время это target/myproject.jar и target/lib. Эта часть работает. Чего мне не хватает, так это способа иметь classpath или манифест, который включает все мои зависимости в target / lib и в правильном порядке. build-path дает мне правильный порядок jar, но он ссылается на каталог .m2-Maven. Сейчас мне приходится вручную редактировать путь к классу и обновлять мои сценарии запуска каждый раз, когда меняются зависимости.
3. Спасибо, я понял, чего вы хотите, но я хотел бы знать, почему вы этого хотите. Какую проблему вы хотите решить, создав classpath с записями в target (которая не может быть решена с помощью «обычного» classpath)?
4. Какой проект вы создаете? ВОЙНА / EAR?
Ответ №1:
Следующее выполняет эту работу за меня:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.0.1</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}${file.separator}lib</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>false</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
</configuration>
</execution>
<execution>
<id>build-classpath</id>
<phase>package</phase>
<goals>
<goal>build-classpath</goal>
</goals>
<configuration>
<attach>true</attach>
<outputFile>${project.build.directory}${file.separator}classpath</outputFile>
<prefix>target${file.separator}lib</prefix>
</configuration>
</execution>
</executions>
</plugin>