我有一个Maven项目,在pom.xml中配置了一些依赖项。
现在,当我运行mvn package
时,依赖项被下载到~/.m2/repository
中。最后,这是一个大的目录树,其中包含许多包含jar
文件的目录和子目录。
我没有使用任何IDE -只是从命令行运行mvn
和java
。
现在,当我尝试运行我的项目时:
$ java -cp target/my-app-1.0-SNAPSHOT.jar App
字符串
我得到一个NoClassDefFound
错误-我可以理解,因为我试图访问我的代码中的依赖代码,它不在类路径中-没有任何东西定义到~/.m2/repository
目录的CLASSPATH。
所以我的问题是-我如何从命令行运行我的程序,并让JVM使用来自~/.m2/repository
的依赖项?
我一直在网上搜索这个问题,令人惊讶的是没有找到答案。我最终设法做到的是:
$ mvn dependency:build-classpath
型
然后将./target/my-app-1.0-SNAPSHOT.jar
链接到这个字符串,然后将其与-cp
选项一起使用。
是这样吗?它相当笨重。。
无论如何,我可以摆脱使用一些IDE,这很好。但是如何将我的应用程序打包在Docker镜像中呢?这是怎么做到的?
- 谢谢-谢谢
1条答案
按热度按时间lyr7nygr1#
问题是你在 * 反对 * Maven,而不是 * 与它一起工作。您应该让Maven处理所有与类路径相关的问题。
如果你想把所有的依赖jar都收集到一个文件夹中,Maven可以帮你完成。
如果你想运行或调试你的应用程序,无论是从IDE还是从命令行,Maven都可以为你做到。
如果您想构建一个包含所有依赖类的JAR文件,Maven可以为您做到这一点。
简而言之:使用工具,而不是反对它。