Добавление внешней банки в проект с использованием maven-shading

Моя цель - добавить внешнюю банку в мой проект Maven. Запуск проекта вызывает NoClassDefFoundError. Поэтому я провел небольшое исследование, чтобы выяснить, что, возможно, внешний jar-файл не включен в мой созданный файл jar.

Поэтому я нашел решение использовать maven-shade-plugin, но я немного застрял, потому что проект не скомпилируется.

У меня есть следующий pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>this.isa.test</groupId>
  <artifactId>test</artifactId>
  <version>0.0.1</version>
  <build>
   <plugins>
       <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-compiler-plugin</artifactId>
           <configuration>
               <source>1.8</source>
               <target>1.8</target>
           </configuration>
       </plugin>
       <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>3.2</version>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>shade</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
   </plugins>
</build>
<repositories>
    <repository>
      <id>spigot-repo</id>
      <url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url>
    </repository>
</repositories>
<dependencies>
       <dependency>
           <groupId>org.bukkit</groupId>
           <artifactId>bukkit</artifactId>
           <version>1.12.2-R0.1-SNAPSHOT</version><!--change this value depending on the version or use LATEST-->
           <type>jar</type>
           <scope>provided</scope>
       </dependency>
       <dependency>
           <groupId>org.spigotmc</groupId>
           <artifactId>spigot-api</artifactId>
           <version>1.12.2-R0.1-SNAPSHOT</version><!--change this value depending on the version-->
           <type>jar</type>
           <scope>provided</scope>
       </dependency>
       <dependency>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-shade-plugin</artifactId>
           <version>3.2.0</version>
         <type>maven-plugin</type>
        </dependency>
   </dependencies>
</project>

Обратите внимание, что maven-shade-plugin упоминается как зависимость и включается в качестве подключаемого модуля для сборки. Я компилирую проект через Eclipse IDE с предустановленной интеграцией maven, как показано ниже: mvn-install< /а>.

В консоли будут выдаваться следующие сообщения об ошибках:

[INFO] --------------------------------[ jar ]---------------------------------
[WARNING] The POM for org.apache.maven.plugins:maven-shade-plugin:jar:3.2 is missing, no dependency information available
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.195 s
[INFO] Finished at: 2018-09-30T09:48:43+02:00
[INFO] ------------------------------------------------------------------------
[ERROR] Plugin org.apache.maven.plugins:maven-shade-plugin:3.2 or one of its dependencies could not be resolved: Failure to find org.apache.maven.plugins:maven-shade-plugin:jar:3.2 in https://repo.maven.apache.org/maven2 was cached in the local repository, resolution will not be reattempted until the update interval of central has elapsed or updates are forced -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/PluginResolutionException

Честно говоря, я немного перегружен, потому что это моя первая попытка использовать Maven. Здесь и в Интернете полно вопросов и ответов, но ничего не подходит для моей ситуации.


person tgn    schedule 30.09.2018    source источник


Ответы (1)


Я не использую Eclipse, а вместо этого вызываю maven из командной строки, и для того, чтобы все заработало, я бы порекомендовал вам то же самое. После того, как у вас заработает сборка maven, вы можете попробовать следующую задачу с Eclipse, что в любом случае не должно быть сложным.

Ваш pom нуждается в следующих исправлениях:

  • удалить плагин тени из зависимостей; зависимости должны содержать только артефакты, которые необходимы для javac для компиляции проекта, в вашем случае также артефакты, необходимые во время выполнения, но никогда (за очень немногими исключениями) артефакты инструментов maven

  • исправить версию плагина тени на 3.2.0 (у вас это правильно в вашей зависимости, но не в объявлении плагина)

Затем попробуйте mvn clean install в командной строке (убедитесь, что вы находитесь в том же каталоге, где существует ваш файл pom), и это должно сработать - по крайней мере, это сработало для меня.

person Petr Kozelka    schedule 30.09.2018
comment
Исправление номера версии было решением моей проблемы. Спасибо за это и подсказку относительно зависимостей! - person tgn; 30.09.2018