为什么用maven包生成jar文件后还要运行一个javaclass?
Why should I run a java class after generating jar file with maven package?
我是 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 class.
我的理解是 1. 创建一个新的 'target' 目录并在其中放置 jar 文件。并且我们使用 2. to 运行 App class 使用 jar 文件。我的问题是,为什么我们 运行 App class 是这样的?为什么它比去 src/main/java/com/mycompany/app 和 运行ning java App.java
更好?也许我不明白包装的好处。感谢您的帮助。
mvn package
Maven是java的包管理工具之一..标志包,对app进行打包。它用于为项目声明 deps、打包项目、构建项目以及将二进制文件安装到可以被 java 进程读取的位置 (~/.m2/xx/..)。
java -cp target/my-app-1.0-SNAPSHOT.jar
运行应用程序,调用应用程序的main class,-cp代表classPath
Maven 不仅是一个打包工具,也是管理依赖项的工具。
如果您的项目很简单,没有 dependency/no 导入其他包,您可以“只去 src/main/java/com/mycompany/app 和 运行 java App.java
”。如果不是这样,你做不到(试试看)
maven package
将 export/copy 依赖项添加到 target
文件夹,以便 JDK 可以找到所需的 类 并且您可以轻松使用它
要知道为什么的答案,您需要先了解以下几点:
如何编译 Java 程序以及如何 运行 已编译的 java 程序(尤其是在包内声明的程序)
如果包 hello
中有 java class Test
,则可以使用 javac hello\Test.java
编译它,使用 java hello.Test
运行 编译它(也就是说,我们使用 运行 程序的完全限定名称,不能像 java Test
那样 运行,它会给你错误“找不到或加载主 class 测试”)
所以,只是去 src/main/java/com/mycompany/app 和 运行ning java App.java
是行不通的,但是从 src/main/java 文件夹你可以 运行 就像 com.mycompany.app.App
什么是jar包
jar
即 Java 存档只是一个 zip 文件,聚合了所有 java classes 以便它可以作为一个单元分发。
类路径
类路径是 java 将查找已编译的 classes
的地方
如何 运行 依赖于 Java class 其他 jar 文件中的程序
假设我的测试 class 取决于 class XYZ,它位于
abc.jar 文件,那么我们需要告诉 java 在这个 abc.jar 中搜索
依赖项(将此 jar 包含在 classpath 中)。这可以使用命令 java -cp abc.jar hello.Test
来完成,这里 -cp
选项只是一个 class 路径,用于告诉 java 关于 classes 的目录或档案可以找到。当测试 class 在 jar 文件中时可以使用此命令,就像您的情况
Maven
如果你已经理解了上面的事情,那么你就会知道 Maven 与 运行ning 你的程序无关。它只是一个构建工具,可帮助从您的代码构建 jar 文件,并有助于 executing/organizing 除了构建之外的不同任务,如清理、运行 宁测试等
我是 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 class.
我的理解是 1. 创建一个新的 'target' 目录并在其中放置 jar 文件。并且我们使用 2. to 运行 App class 使用 jar 文件。我的问题是,为什么我们 运行 App class 是这样的?为什么它比去 src/main/java/com/mycompany/app 和 运行ning java App.java
更好?也许我不明白包装的好处。感谢您的帮助。
mvn package
Maven是java的包管理工具之一..标志包,对app进行打包。它用于为项目声明 deps、打包项目、构建项目以及将二进制文件安装到可以被 java 进程读取的位置 (~/.m2/xx/..)。
java -cp target/my-app-1.0-SNAPSHOT.jar
运行应用程序,调用应用程序的main class,-cp代表classPath
Maven 不仅是一个打包工具,也是管理依赖项的工具。
如果您的项目很简单,没有 dependency/no 导入其他包,您可以“只去 src/main/java/com/mycompany/app 和 运行 java App.java
”。如果不是这样,你做不到(试试看)
maven package
将 export/copy 依赖项添加到 target
文件夹,以便 JDK 可以找到所需的 类 并且您可以轻松使用它
要知道为什么的答案,您需要先了解以下几点:
如何编译 Java 程序以及如何 运行 已编译的 java 程序(尤其是在包内声明的程序)
如果包hello
中有 java classTest
,则可以使用javac hello\Test.java
编译它,使用java hello.Test
运行 编译它(也就是说,我们使用 运行 程序的完全限定名称,不能像java Test
那样 运行,它会给你错误“找不到或加载主 class 测试”)
所以,只是去 src/main/java/com/mycompany/app 和 运行ningjava App.java
是行不通的,但是从 src/main/java 文件夹你可以 运行 就像com.mycompany.app.App
什么是jar包
jar
即 Java 存档只是一个 zip 文件,聚合了所有 java classes 以便它可以作为一个单元分发。类路径
的地方
类路径是 java 将查找已编译的 classes如何 运行 依赖于 Java class 其他 jar 文件中的程序
假设我的测试 class 取决于 class XYZ,它位于 abc.jar 文件,那么我们需要告诉 java 在这个 abc.jar 中搜索 依赖项(将此 jar 包含在 classpath 中)。这可以使用命令java -cp abc.jar hello.Test
来完成,这里-cp
选项只是一个 class 路径,用于告诉 java 关于 classes 的目录或档案可以找到。当测试 class 在 jar 文件中时可以使用此命令,就像您的情况Maven
如果你已经理解了上面的事情,那么你就会知道 Maven 与 运行ning 你的程序无关。它只是一个构建工具,可帮助从您的代码构建 jar 文件,并有助于 executing/organizing 除了构建之外的不同任务,如清理、运行 宁测试等