Maven — Экспортировать путь к классу на основе зависимостей без накладных расходов .m2

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