我在 IntelliJ 中有一个 Java 程序,它有一个 pom.xml 并使用 Maven。这些包已下载,目前由 IntelliJ 找到。
虽然我有点困惑,因为据我所知,Maven 存储库不是 CLASSPATH 的一部分。那么 IntelliJ 是否只是在其 Maven 存储库中查找包的地方做了一些魔术? (我认为 IntelliJ 有自己的 Maven 存储库。我单独安装了 Maven 3,但我认为它没有使用它。)
但更一般地说:如果您使用 Maven 构建 JAR,那么我猜它会将依赖项放在 JAR 中,Java 程序可以找到它们,所以不会有问题。但是如果你只是直接运行一个 Java 程序,你是否需要将 Maven 存储库添加到你的类路径或者发生其他事情?
感谢您提供的任何信息,以减轻我的困惑:)
最佳答案
当您使用 main()
方法的运行时配置从 IntelliJ 启动程序时,IntelliJ 会从所有项目依赖项构造类路径。您可以在“运行”窗口中看到这一点,第一行日志是用于启动 main()
的 java
命令。这是一条很长的线,但通常看起来类似于:
java -javaagent:/opt/idea/idea-IC-173.3727.127/lib/idea_rt.jar=40165:/opt/infra/idea/idea-IC-173.3727.127/bin -Dfile.encoding=UTF-8 -classpath /home/ [...]
IntelliJ 构造 -classpath
参数,添加模块 target
目录和从本地 Maven 存储库引用的 Maven 依赖项。
当您使用 Maven mvn clean package
打包项目时,它通常会变成一个只有您的代码的独立 JAR(除非您更改了默认值)。现在您有几个选择如何提供启动 main()
所需的依赖项:
- 像 IntelliJ 一样使用
-classpath
参数提供它们。 - 添加
maven-shade-plugin
并使用shade
目标构建a runnable Uber JAR .这将创建一个不需要-classpath
的胖 JAR。 - 使用其他一些 Maven 插件来执行第 2 点,例如Spring Boot
spring-boot:repackage
目标。
关于java - Java 程序如何找到它的 Maven 包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49287525/