【问题标题】:cannot find class at runtime in Maven在 Maven 运行时找不到类
【发布时间】:2016-01-23 15:54:21
【问题描述】:

我是 Maven 新手,我正在尝试学习如何使用它。我的依赖看起来像这样:

<dependency>
         <groupId>com</groupId>
         <artifactId>phidgets</artifactId>
         <version>2.1</version>
         <scope>system</scope>
         <systemPath>${project.basedir}/src/phidget21.jar</systemPath>
</dependency>

我已经使用mvn install:file-install 安装了依赖项。之后,该项目可以使用mvn compile 正常编译。但是,当我尝试mvn exec:java -Dexec.mainClass="myApp" 时,它找不到phidget21.jar 中的类并抛出ClassNotFoundException

任何指针将不胜感激。

【问题讨论】:

    标签: java maven-2 maven-plugin maven-assembly-plugin


    【解决方案1】:

    简短的回答可以解决您的问题,但不是最佳做法

    您需要将 exec 插件配置为使用 system 作用域依赖项,它默认使用 runtime

    您可以在 POM 中进行配置,也可以在命令行中使用 -Dexec.classpathScope=system

    话虽如此,mvn install:install-file 在您的情况下是完全多余的,因为 system 范围的依赖项永远不会通过存储库解决。

    正确的做法:

    既然你已经声明自己是一名 Maven 新手,我强烈建议你远离system-scoped 依赖项,除非绝对必要;它们使您的构建不那么便携。

    您对mvn install:install-file 的调用意味着您可以完全省去&lt;scope&gt;&lt;systemPath&gt; 标记,它会按您的意愿工作。 Maven 将通过存储库解决您的依赖关系。

    【讨论】:

    • 我试图摆脱 但它根本无法编译,尽管我已经完成了 mvn install:install-file
    • 能否请您发布带有所有参数的确切mvn install:install-file 命令
    • mvn install:install-file -Dfile=src/phidget21.jar -DgroupId=com -DartifactId=phidgets -Dversion=2.1 -Dpackaging=jar -DgeneratePom=true
    • 看起来差不多。 jar 文件是否到达 ~/.m2/repository/com/phidgets/2.1/
    • 是的,我也仔细检查过。
    猜你喜欢
    • 2015-08-10
    • 1970-01-01
    • 2018-08-23
    • 2020-10-04
    • 1970-01-01
    • 2020-02-13
    • 1970-01-01
    • 2018-07-13
    • 1970-01-01
    相关资源
    最近更新 更多