为什么我应该运行java类生成jar文件与maven包后?



我是jar文件和maven的新手,并试图理解maven的使用。在这篇5分钟Maven文章中,我们使用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。创建一个新的"目标"目录,并在其中放入jar文件。我们用2。使用jar文件运行App类。我的问题是,为什么我们以这种方式运行App类?为什么它比去src/main/java/com/mycompany/app和运行java App.java更好?也许我不明白包装的好处。谢谢你的帮助。

要知道"为什么"的答案,你需要首先了解以下事情:

  1. 如何编译Java程序以及如何运行编译后的Java程序(特别是在包内声明的程序)
    如果在包hello中有Java类Test,可以使用javac helloTest.java编译它,使用java hello.Test运行它(即我们使用完全限定名运行程序,不能像java Test那样运行它,它会给你错误"无法找到或加载主类test_;)
    进入src/main/java/com/mycompany/app运行java App.java不行但是在src/main/java文件夹下你可以运行com.mycompany.app.App

  2. 什么是jar打包。
    jar也就是说,Java归档文件只不过是一个压缩文件,聚合了所有Java类,以便它可以作为一个单元分发。

  3. Classpath
    Classpath是java查找编译类的地方

  4. 如何运行一个程序依赖于Java类在其他jar文件
    假设如果我的测试类依赖于类XYZ是在Abc.jar文件,然后我们需要告诉Java在Abc.jar中搜索依赖项(在类路径中包含这个jar)。这可以使用命令java -cp abc.jar hello.Test来完成,这里-cp选项只是一个类路径,用于告诉java可以在哪些目录或存档中找到类。当Test类位于jar文件中时,例如

    ,可以使用此命令。
  5. Maven
    如果你已经理解了上面的事情,那么你就会知道Maven与运行你的程序无关。它只是一个构建工具,可以帮助您从代码中构建jar文件,并帮助执行/组织除构建之外的不同任务,如清理,运行测试等。

mvn package

Maven是java包管理工具之一。标记包,打包应用程序。它用于为项目声明深度,打包项目,构建项目,并将二进制文件安装到java进程可以读取的地方(~/.m2/xx/..)。

java -cp target/my-app-1.0-SNAPSHOT.jar 

运行应用,调用应用的主类,-cp代表classPath

Maven不仅是一个打包工具,也是一个管理依赖关系的工具。

如果你的项目很简单,没有依赖/没有导入其他包,你可以"只去src/main/java/com/mycompany/app并运行java App.java"。如果不是这样,你就不能做(试一试)

maven package将导出/复制依赖项到target文件夹,以便JDK可以找到所需的类,您可以轻松使用

相关内容

  • 没有找到相关文章

最新更新