Maven не загружает зависимости - PullRequest
0 голосов
/ 13 января 2020

Я пытаюсь заставить Maven загрузить зависимости. Я использую команды, которые, я полагаю, вы должны использовать, и это просто чистая командная строка, без участия IDE, но этого по-прежнему не происходит.

Проблема также в моем собственном проекте, но Я буду использовать это кем-то еще в качестве примера: https://github.com/stephanrauh/BeyondJava.net-Articles/tree/master/MethodModificationWithASM

Я пробовал следующие команды:

mvn compile
mvn test
mvn package
mvn install
mvn dependency:resolve

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

[INFO]
[INFO] The following files have been resolved:
[INFO]    javassist:javassist:jar:3.12.1.GA:compile
[INFO]    org.ow2.asm:asm:jar:5.0.3:compile
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  16.690 s
[INFO] Finished at: 2020-01-13T16:13:34Z
[INFO] ------------------------------------------------------------------------

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

C:\BeyondJava.net-Articles\MethodModificationWithASM>java -jar target\MethodModificationWithASM-0.0.1-SNAPSHOT.jar
Error: Unable to initialize main class de.beyondjava.demos.bytecode.Main
Caused by: java.lang.NoClassDefFoundError: org/objectweb/asm/ClassVisitor

и то же самое, когда я пытаюсь запустить из файлов .class вместо jar. И ошибка правильная: асм фляга фактически отсутствует:

C:\BeyondJava.net-Articles\MethodModificationWithASM>dir /s *.jar
 Volume in drive C is Windows
 Volume Serial Number is 04EE-7EB0

 Directory of C:\BeyondJava.net-Articles\MethodModificationWithASM\target

13/01/2020  16:01             8,144 MethodModificationWithASM-0.0.1-SNAPSHOT.jar
               1 File(s)          8,144 bytes

     Total Files Listed:
               1 File(s)          8,144 bytes
               0 Dir(s)  164,672,442,368 bytes free

, и при этом она не была извлечена где-либо еще; Я искал весь жесткий диск.

Кажется, что pom.xml указывает на зависимость в порядке, и Maven, кажется, рад, что это так:

<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>de.beyondjava.demos.bytecode</groupId>
  <artifactId>MethodModificationWithASM</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>MethodModificationWithASM</name>
  <description>This demo shows how to create and run byte code in a Java program.
</description>
  <dependencies>
    <dependency>
      <groupId>org.ow2.asm</groupId>
      <artifactId>asm</artifactId>
      <version>5.0.3</version>
    </dependency>
    <dependency>
      <groupId>javassist</groupId>
      <artifactId>javassist</artifactId>
      <version>3.12.1.GA</version>
    </dependency>
  </dependencies>
  <build>
    <sourceDirectory>src</sourceDirectory>
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.1</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

Так чего мне не хватает

1 Ответ

4 голосов
/ 13 января 2020

Вы не можете просто запустить jar в командной строке без правильного пути к классу. Maven загружает артефакты в .m2/repository в вашем домашнем каталоге и использует их для сборки, но не копирует их для нацеливания или добавления в созданный jar.

Большинство jar-файлов используются как библиотеки и для них Поведение просто отлично. Если вы хотите запустить jar из командной строки, лучше создать jar с зависимостями:

Как создать исполняемый JAR с зависимостями, используя Maven?

...