我是jar文件和maven的新手,正在尝试理解Maven的用法。在这篇Maven in 5 minutes文章中,我们使用maven创建my-app项目,目录结构如下所示:
my-app
|-- pom.xml
-- src
|-- main
| -- java
| -- com
| -- mycompany
| -- app
| -- App.java
-- test
-- java
-- com
-- mycompany
-- app
-- AppTest.java
字符串
然后我们使用1. mvn package
,后面跟着2. java -cp target/my-app-1.0-SNAPSHOT.jar com.mycompany.app.App
,它运行我们的App.java类。
我的理解是1.创建一个新的'target'目录,并在其中创建jar文件。我们使用2.使用jar文件运行App类。我的问题是,为什么我们以这种方式运行App类?为什么它比直接去src/main/java/com/mycompany/app编译并运行java App.java
更好?也许我不明白打包的好处。谢谢你的帮助。
3条答案
按热度按时间e5nszbig1#
要想知道为什么,你需要先了解以下几点:
1.如何编译Java程序以及如何运行编译后的Java程序(特别是在包中声明的程序)
如果你在
hello
包中有java类Test
,你可以使用javac hello\Test.java
编译它,并使用java hello.Test
运行它(即我们使用完全限定名来运行程序,不能像java Test
那样运行它,它会给予你错误“找不到或加载主类Test”)所以,只是转到src/main/java/com/mycompany/app并运行
java App.java
是行不通的,但是从src/main/java文件夹中,您可以像运行com.mycompany.app.App
一样运行它1.什么是罐 Package 。
jar
即Java归档文件只不过是一个zip文件,它聚集了所有的Java类,这样它就可以作为一个单元分发。1.类路径
类路径是Java查找已编译类的地方
1.如何运行依赖于其他jar文件中的Java类的程序
假设我的Test类依赖于abc.jar文件中的XYZ类,然后我们需要告诉java搜索这个abc.jar的依赖项(将此jar包含在类路径中)。这可以使用命令
java -cp abc.jar hello.Test
来完成,这里的-cp
选项只是一个类路径,用于告诉java可以找到类的目录或存档。当测试类是在jar文件中,就像在您的情况中一样如果你已经理解了以上的内容,那么你就会知道Maven与运行你的程序无关。它只是一个构建工具,帮助你从代码中构建jar文件,并帮助执行/组织除了构建之外的不同任务,比如清理,运行测试等。
xt0899hw2#
字符串
Maven是java的包管理工具之一。. flag package,打包应用程序。它用于为项目声明deps,打包项目,构建项目,并将二进制文件安装到Java进程可以读取的位置(~/.m2/xx/..)。
型
调用应用程序,调用应用程序的主类,-cp代表classPath
oyjwcjzk3#
Maven不仅是一个打包工具,也是一个管理依赖项的工具。
如果你的项目很简单,没有依赖关系/没有导入其他包,你可以“直接去src/main/java/com/mycompany/app运行
java App.java
“。如果不是这样,你不能这样做(试试)maven package
将依赖项导出/复制到target
文件夹,以便JDK可以找到所需的类,您可以轻松使用它