【问题标题】:Maven not downloading dependenciesMaven没有下载依赖项
【发布时间】:2020-04-30 09:45:27
【问题描述】:

我正在尝试让 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 运行时也是如此。而且错误是正确的:实际上缺少asm 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>

那么我错过了什么?

【问题讨论】:

  • 您是否需要在您的个人资料设置中指向一个仓库? maven.apache.org/settings.html
  • 不同的 maven 存储库有不同的工件,原因是 pom.xml 中缺少 maven 存储库定义。应添加repositories 部分。请注意,还有其他 pluginRepositories 部分用于插件,如 maven-compiler-plugin
  • 除非你有特殊的技巧,否则配置并使用mvn exec:java 让 Maven 设置你的类路径。
  • 您的 jar 不包含依赖项,因此您需要适当地设置类路径,或者按照 Thorbjørn 的建议使用 exec:java。
  • 你的java版本是多少?

标签: java maven maven-dependency


【解决方案1】:

如果没有正确的类路径,您不能只在命令行上运行 jar。 Maven 将工件下载到您的主目录中的.m2/repository 并使用它们进行构建,但它不会将它们复制到目标或将它们添加到生成的 jar 中。

大多数 jar 被用作库,对它们来说,行为很好。如果你想从命令行运行一个jar,最好创建一个有依赖关系的jar:

How can I create an executable JAR with dependencies using Maven?

【讨论】:

  • 正是 .m2 将您本地下载的 jar 存储在您在设置中配置的存储库中,因此您无需重新下载 jar y 的版本 x。
猜你喜欢
  • 2015-10-21
  • 2017-11-09
  • 1970-01-01
  • 2013-05-22
  • 2020-07-06
  • 1970-01-01
  • 2018-08-29
  • 2016-09-30
  • 2011-12-01
相关资源
最近更新 更多