Java 如何从具有所有依赖项的命令行编译Maven项目?

Java 如何从具有所有依赖项的命令行编译Maven项目?,java,maven,Java,Maven,我有一个Maven项目,我通常可以从eclipse编译和运行,但当我从命令行编译它时,它的依赖项丢失了,而且我会出错。只有在下载依赖项并将它们添加到c:/Java/jdk/jre/lib/ext之后,我才能编译项目 如何从控制台行编译项目及其依赖项,而不将它们手动添加到jdk?编译器能否以某种方式读取maven依赖项 pom.xml 4.0.0 TCping TCping 0.0.1-快照 src maven编译器插件 3.3 1.8 1.8 commons cli commons cli

我有一个Maven项目,我通常可以从eclipse编译和运行,但当我从命令行编译它时,它的依赖项丢失了,而且我会出错。只有在下载依赖项并将它们添加到c:/Java/jdk/jre/lib/ext之后,我才能编译项目

如何从控制台行编译项目及其依赖项,而不将它们手动添加到jdk?编译器能否以某种方式读取maven依赖项

pom.xml


4.0.0
TCping
TCping
0.0.1-快照
src
maven编译器插件
3.3
1.8
1.8
commons cli
commons cli
1.3.1
公用网络
公用网络
3.3
回写
回归经典
1.1.6

Javac对maven一无所知。因此,它不会使用maven pom.xml

maven的价值在于它消除了构建、测试和发布项目的手工工作

这包括获取依赖项,运行javac,并将它们添加到javac命令的类路径中

在maven将依赖项下载到~/.m2/repository之后,您可以手动执行javac。但是,您需要告诉javac在哪里可以找到jar。因此,这是通过类路径参数完成的


如果在使用mvn编译项目后试图运行该项目,则需要在放置.class文件的同一文件夹中执行此操作。因此应该是/target/java或类似的

从带有一些maven支持(Eclipse、IntellIJ)的IDE运行应用程序应该非常简单。这些IDE将负责创建正确的类路径

如果要手动执行此操作,请尝试以下操作:

更改为包含pom.xml文件的目录 执行maven命令:

mvn clean install
这将编译您的项目并创建您在pom.xml文件中定义的jar。它运行maven阶段清理和每个阶段安装(编译、测试等)

然后收集所有用作依赖项的jar文件(运行项目所需):

这将执行依赖插件,该插件将所有依赖项复制到
target/dependency

然后,您可以使用以下命令运行主方法:

cd target/
java -cp TCPPing-0.0.1-SNAPSHOT.jar:dependency TCPPing
-cp
定义类路径(包含类的所有位置/jar文件/文件夹)
tcping
是您运行的具有main方法的类


注意
是针对Linux/Mac的-我认为windows使用
 < /P>请考虑阅读至少一些Maven文档:-并且永远不要添加任何东西到LIB/EXT/再次!java类路径选项足以运行应用程序。不要用特定于项目的文件污染java安装。我确实读过,但我仍然不知道该怎么做,我对这一切都很陌生。我设法生成了包含所有依赖项的项目jar文件并运行它,但这不是我需要的,我只想让我的编译器从projectFolder/lib读取依赖项请添加项目的
pom.xml
,您需要向JDKs ext文件夹添加哪些依赖项?您可以使用search.maven.org找到相应的依赖项,并将它们添加到您的pom中。commons cli、commons net和logback classicI具有/target/classes文件夹,其中包含所有类文件。但当我在那个文件夹中打开命令行并运行JavaTCping参数时,我仍然得到NoClassDefExceptionThank you!一个有点无关的问题,但你们知道为什么我的logback记录器在我这样运行程序时不工作吗?当我从Eclipse运行它时,它工作得很好,但当我从控制台运行程序时,它只在控制台中打印日志,而不在文件中?它可能找不到您的配置文件,并使用默认值(日志到控制台)。如果您遵循maven标准并将配置文件放入src/main/resources(我还建议使用src/main/java作为java文件的默认值,您已经重新配置了该部分),它将最终位于您正在创建的jar中,因此在类路径中可用。IDE从文件夹中获取它,因为您可能在IDE中维护一组文件夹作为类路径。例如,IDE几乎可以获取任何东西—不总是想要的,但在这种情况下很幸运。@wemu,我正在使用您提到的命令来运行项目。控制台打印
错误:无法找到或加载主类SocketwindowOrdCount
,您认为原因是什么?我建议创建一个新问题-您的问题看起来像缺少依赖项或错误的类路径,但从注释中很难判断您在做什么。
cd target/
java -cp TCPPing-0.0.1-SNAPSHOT.jar:dependency TCPPing