命令行运行java程序,引入的其他jar包时,如何解决

命令行运行java程序,引入的其他jar包时,如何解决,第1张

java -cp ;Ajar B\x0d\\x0d\A 是你的jar包,跟B放在一个文件夹就行。如果不在一个地方,就要指定了,如:\x0d\ java -cp ;d:\Ajar B\x0d\B 就是你要执行的类 \x0d\==================\x0d\原理:\x0d\java 是执行编译后的class的,这个不用多说,都知道\x0d\-cp 就是引入外部 zip包或者jar包。\x0d\ 正确来说就相当于你在环境变量配置的classpath后的参数。\x0d\ 即:指定运行时需要的class。\x0d\ 其中 是在当前目录找 ; 以后后面的,是到你指定的目录找 \x0d\==================\x0d\你看我给的例子了吗?我可没那么说。\x0d\第一行可是这么写的:java -cp ;Ajar B (A、B的解释在上面) \x0d\; 也别给漏了

楼主,Java将引用的外部jar的程序打成jar包的方法有很多,以下我给你摧荐两种较为常用的:

1、使用一个专门将Java工程打成jar包的工具fat jar eclipse plugin,一个非常小且简单好用的插件。

2、使用jdk自带的-jar命令,不过要对其中的参数有一定的了解才能用得好。cmd控制台下可使用jar -help查看其参数说明。

强烈建议楼主使用1中的方法,相信你用了以后还会一直使用。

有问题欢迎提问,!

打包jar一共有两种方式

第一种:

快捷键(Ctrl+Alt+Shift+S)打开项目的Project Structure。在Artifacts创建

接着,指定main class,如下:

最后,得到创建得到的artifacts

注:这里可以通过“+”或者“-”选择那些需要打入artifacts的第三方jar文件,也可以将maven中的包都导入进来;

在菜单栏目选Build,最后一栏Build Artifacts

最后,在出现的窗口创建

得到打包结果:

去执行

一般会执行成功如果执行出错查看是什么错误排查即可;

maven打包的步骤:

[上传中(image-784a61-1649340624814-14)]

maven 默认打包插件,用来创建 project jar

pomxml配置如下:

21 maven-jar-plugins 无依赖第三方jar的打包

maven 默认打包插件,用来创建 project jar

pomxml配置如下:

运行:在target中找到打包出来的xxxjar包,运行java -jar xxxjar即可,但是如果程序有依赖其他包,比如程序依赖jdbc去查询db,这时候再执行就会出现找不到jdbc依赖,因为我们并没有将依赖包打进去。

支持定制化打包方式,更多是对项目目录的重新组装。以下方式用的比较少,因为我们依赖的jar,也会打进到我们最终生成的jar中,会导致一个jar文件过大,而且如果要给第三方使用,最好给一个纯净的。

pomxml配置如下:

支持定制化打包方式,更多是对项目目录的重新组装。在22基础上,我们还可以利用assembly,将我们依赖的jar归类,打包成一个zip。发布项目的时候,将zip包copy到服务器上,直接unzip xxxzip,里面包含要运行的jar以及依赖的lib,还有配置的config文件,还可以包括执行脚本,可以直接启动服务。

maven-assembly-plugin还需要配置一个assemblyxml文件,用于过滤不必要的第三方jar包文件,或者确定自己编译的项目文件路径、项目的启动脚本文件目录,打包的类型格式zip或者targz等。

assemblyxml文件内容为:

打包结果为:

用来打可执行包,包含依赖,以及对依赖进行取舍过滤。使用这种方式打出来的是揉合在一起,成为一个jar文件。这种打包方式的优点是可以利用transformer把第三方jar相同的配置文件组合成一个文件,如referenceconf文件等等。

pomxml配置如下:

打包结果:

该插件主要用于项目maven编译打包时,跳过单元测试,pomxml配置为:

文献:

IntelliJ IDEA自身以及maven项目打包方式(单模块) - 牧梦者 - 博客园 (cnblogscom)

总体思路是先打成jar再把jar打成exe。主要看13和23里的内容就可以了。

1.将项目打成jar:

11要将项目打包成jar文件,方法很多,可以用Eclipse自带的打包工具Ant打包,也可以用Eclipse的Export生成jar。经过尝试后,我不推荐用Ant打包,因为要自己编写xml脚本语言,还要增加一些外部的jar,所以我打了好几次都没打成。

12在这里介绍两种方法生成jar,第一种是用Eclpise的Export功能。在要打包的项目上击右键,选择Export,在窗口中选择Java里的JARfile。Next后的窗口中已经自动选好了要打包的项目,用户可以点击加号查看项目里被打包的内容。在下面的JARfile里设置你打包生成jar文件的输出目录,下一步在出现的窗口中选择Useexistingmanifestfromworkspace,在下面的Mainclass后面直接点Browse,它会自动列出你项目中有主函数main的类。选择主类后点Finish即可生成jar文件。在此说明一下,这种打包方法不能把项目中的外部的jar包打进来,因该是也要编写一些脚本语言,没往深研究。所以生成后的jar有些是不能执行的。

13第二种方法是利用Eclipse的一个第三方插件fatjar生成jar文件,也是本人觉得最简单最方便的一种生成方式。先从网上下载些插件,解压后是一个plugins的文件夹,里面只有一个文件夹,我的“netsffjepfatjar_0024”将它copy到Eclipserplugins文件夹下,此插件就安装成功了,重启Eclipse在项目上右击就会看到多出一个“BuildFatJar”在前面有个绿色的“”号,这时你就可以用此插件打包你的项目了。进去后第一个界面Jar-Name里增入要生成的jar文件名,我的是“CAMP_fatjar”。在Main-Class后点Browse像Export一样它也会列出你项目中的主类,选择后其它默认即可,Next后会列出你要打包的所有内容,这个插件的优势就是可以将你项目中的外部jar也打进来,有三个先项,其中ExportANT是生成buildxml脚本文件,方便用户以后修改脚本,其它两个按钮没用。在这里什么都不点,直接点Finish就可以生成jar文件。

2将jar打成exe文件:

21虽然此时的jar文件已经可以执行了。生成exe的文件我也是用两种方法实现的,用到的打包工具是j2ewiz和exe4j,它们的不同会在我下面的介绍中体现出来。

22首先是j2ewiz,这个软件是绿色的,不用安装,解压后可以直接运行,但这个软件生成的exe文件不是跨平台的。运行此程序首先就是输入要打包的jar文件,我们浏览JAR选择我们之前用fatjar生成的“CAMP_fatjar”项目文件(详见13),下面那个选项是提示用户最低要求的JRE版本,一般选13。下一步,因为我们的寝室管理系统是图形界面,所以在这里选“Windows窗口程序”下一步它也是自动生成要执行的主类,你只要选择就可以。下面的选框可以选择你启动程序显示的。下一步后这个窗可按个人喜好选择。下一步,如果你的程序还有什么依赖的外部jar文件,可以从这里加上,但因为之前的fatjar以经将我们项目所用的那三个连数据库的外部类打进CAMP_fatjar包里了,所以这里不用再添加。如果你之前是用Export打的jar包,那么这里就需要再把那个三个数据库的包加进来了(详见12)。下一步是添入要生成的exe文件名,再选一个程序图标就可以了,下一步后生成exe文件,点完成。双击生成的exe文件就能看到运行效果了,这种exe文件还没有脱离JDK环境,还不能跨平台使用,只能用于小组成员测试使用。

23=下面进入最关键的,如何打包跨平台的exe文件。用到的软件是exe4j,我用的是V40版的,此软件需要破解。安装后运行左窗窗口标有十步,其实打包过程也非常简单。第一步完全略过,直接点Next第二步我们选择“JAR

inEXEmode”就是选择我们已经有制作好的jar文件。第3步上面是项目名称,可随便填写,下面一个写出你想要将打包后的exe文件输出的目录我的是“桌面project”。第4步,由于我的演示程序是图形的,所以选第一个,如果你的程序是控制台的,则选择第二个,Executablename写你将要生成的exe文件的名字,IconFile可以选择生成文件的图标。第5步,先别管上面的,先在下面单击绿色的“”号,在d出的窗口中点Archive,然后找到起初已经做好的CAMP_fatjar(详见13)文件,"OK"后返回,在下面的ClassPath里就出现jar文件路径后,再在上面MainClass栏内点击找到main所在的类。第6步,你系统的JRE版本,一般是填个13,下面填16在这里单击advancedoptions,选择searchsequence。选这个就是因为我们要把JDK环境也打包进来,好让程序能跨平台使用。首先要从你系统的JDK下的JRE目录copy到你exe文件的输出目录下“桌面projectJRE”,然后回到exe4j中在d出窗口删除列表中的所有项。我的是三项,一个注册表的,一个JAVA环境变量的,一个JDK环境变量的,都不要。然后单击绿“”,选择directory并选择JRE的根目录,我的是“桌面projectJRE”就是copy后的目录,选完后exe4jd出窗口中的Directory里会显示“JRE”。点OK关闭该窗口,返回exe4j的主窗口,你就可以看到刚加的路径。再从主窗口左侧窗口中单击advancedoptions,并选择preferredVM,在d出的窗口中选择clienthostspotVM,单击next按钮继续。7、8步是一些个性设置默认即可。第9步编译完后第10步你点那个“ClickHeretoStarttheApplication”按钮就可以看到程序运行效果了,然后再点”Seaveas”保存一个exe4j生成的一个文件,随便存哪里都行,和我们的exe程序无关。全部制作过程就完工了。

JAR 文件非常类似 ZIP 文件——准确的说,它就是 ZIP 文件,所以叫它文件包。JAR 文件与 ZIP 文件唯一的区别就是在 JAR 文件的内容中,包含了一个 META-INF/MANIFESTMF 文件,这个文件是在生成 JAR 文件的时候自动创建的。举个例子,如果我们具有如下目录结构的一些文件: == `-- test `-- Testclass把它压缩成 ZIP 文件 testzip,则这个 ZIP 文件的内部目录结构为: testzip `-- test `-- Testclass如果我们使用 JDK 的 jar 命令把它打成 JAR 文件包 testjar,则这个 JAR 文件的内部目录结构为: testjar |-- META-INF | `-- MANIFESTMF `-- test `--Testclass2 创建可执行的 JAR 文件包制作一个可执行的 JAR 文件包来发布你的程序是 JAR 文件包最典型的用法。Java 程序是由若干个 class 文件组成的。这些 class 文件必须根据它们所属的包不同而分级分目录存放;运行前需要把所有用到的包的根目录指定给 CLASSPATH 环境变量或者 java 命令的 -cp 参数;运行时还要到控制台下去使用 java 命令来运行,如果需要直接双击运行必须写 Windows 的批处理文件 (bat) 或者 Linux 的 Shell 程序。因此,许多人说,Java 是一种方便开发者苦了用户的程序设计语言。其实不然,如果开发者能够制作一个可执行的 JAR 文件包交给用户,那么用户使用起来就方便了。在 Windows 下安装 JRE (Java Runtime Environment) 的时候,安装文件会将 jar 文件映射给 javawexe 打开。那么,对于一个可执行的 JAR 文件包,用户只需要双击它就可以运行程序了,和阅读 chm 文档一样方便 (chm 文档默认是由 hhexe 打开的)。那么,现在的关键,就是如何来创建这个可执行的 JAR 文件包。因为要创建可执行的 JAR 文件包,光靠指定一个 manifestmf 文件是不够的,因为 MANIFEST 是 JAR 文件包的特征,可执行的 JAR 文件包和不可执行的 JAR 文件包都包含 MANIFEST。关键在于可执行 JAR 文件包的 MANIFEST,其内容包含了 Main-Class 一项。这在 MANIFEST 中书写格式如下:Main-Class: 可执行主类全名(包含包名)例如,假设上例中的 Testclass 是属于 test 包的,而且是可执行的类 (定义了 public static void main(String[]) 方法),那么这个 manifestmf 可以编辑如下:Main-Class: testTest 最后以我的程序为例:1、打包: jar cvfm MySMSLibjar manifestmf -C classes/ 把classes目录下的所有class文件打包。

Datastream作业开发时往往会遇到一些jar包冲突等问题,本文主要讲解作业开发时需要引入哪些依赖以及哪些需要被打包进作业的jar中,从而避免不必要的依赖被打入了作业jar中以及可能产生的依赖冲突。

一个Datastream作业主要涉及下述依赖:

每一个Flink应用程序都依赖于一系列相关的库,其中至少应该包括Flink的API 许多应用程序还依赖于连接器相关的库(如 Kafka, Cassandra等)在运行Flink应用程序时,无论是在运行在分布式的环境下还是在本地IDE进行测试,Flink的运行时相关依赖都是必须的。

与大多数运行用户自定义应用程序的系统一样,Flink 中有两大类依赖项:

每一个Flink应用程序的开发至少需要添加对相关API的基础依赖。

手动配置项目时,需要添加对Java/Scala API的依赖(这里以Maven为例,在其他构建工具(Gradle,SBT等)中可以使用同样的依赖)。

重要提示 :请注意,所有这些依赖项都将其范围设置为"provided"。这意味着需要对它们进行编译,但不应将它们打包到项目生成的应用程序jar文件中——这些依赖项是Flink核心依赖项,在实际运行时已经被加载。

强烈建议将依赖项设置成"provided"的范围,如果未将它们设置为"provided",最好的情况下会导致生成的jar变得臃肿,因为它还包含所有Flink核心依赖项。而最怀的情况下,添加到应用程序jar文件中的Flink核心依赖项与您自己的一些依赖项会发生版本冲突(通常通过Flink的反向类加载机制来避免)。

关于IntelliJ的注意事项 :为了使应用程序在IntelliJ IDEA中运行,有必要在运行配置中勾选"Include dependencies with "Provided" scope"选项框。如果没有该选项(可能是由于使用较旧的IntelliJ IDEA版本),那么一个简单的解决方法是创建一个调用应用程序 main() 方法的测试用例。

大多数应用程序的运行需要特定的连接器或库,例如Kafka、Cassandra等连接器。这些连接器不是Flink核心依赖项的一部分,必须作为额外依赖项添加到应用程序中。

下述代码是添加Kafka连接器依赖项的示例(Maven语法):

我们建议将应用程序代码和它所有的依赖以 jar-with-dependencies 的形式打包到一个 application jar中。 这个应用程序jar包可以被提交到已经存在的Flink集群上去,或者被加入到Flink应用程序的容器镜像中去。

从Maven作业模版(见下文Maven作业模版部分)创建的项目,通过mvn clean package命令会自动把依赖打到应用程序的jar包中去。对于没有使用模版进行配置的情况,建议使用Maven Shade Plugin (配置如附录所示) 来构建包含依赖的jar包。

重要提示 :对于Maven(和其他构建工具)来说,要将依赖项正确打包到应用程序jar中,这些应用程序依赖项的scope必须指定为"compile"(与核心依赖项不同,核心依赖项的scope必须指定为"provided")。

Scala的不同版本(211,212等)相互之间是不兼容的。因此,Scala 211对应的Flink版本不能用于使用Scala 212的应用程序。

所有依赖(或传递依赖)于Scala的Flink依赖项都以构建它们的Scala版本作为后缀,例如flink-streaming-scala_211。

只使用Java进行开发时可以选择任何Scala版本,使用Scala开发时需要选择与其应用程序的Scala版本匹配的Flink依赖版本。

:2128之后的Scala版本与之前的212x版本不兼容,因此Flink项目无法将其212x版本升级到2128之后的版本。用户可以在本地自己编译对应Scala版本的Flink。为了使其能够正常工作,需要添加-Djapicmpskip以在构建时跳过二进制兼容性检查。

一般的规则: 永远不要将Hadoop相关依赖直接添加到应用程序中 (唯一的例外是将现有的Hadoop输入/输出Format与Flink的Hadoop兼容包一起使用时)

如果希望将Flink与Hadoop结合使用,则需要包含Hadoop依赖的Flink启动项,而不是将Hadoop添加为应用程序依赖项。Flink将使用HADOOP_CLASSPATH环境变量指定的Hadoop依赖项,可通过以下方式进行设置:

export HADOOP_CLASSPATH=hadoop classpath``

这种设计有两个主要原因:

如果在IDE内部的测试或开发过程中需要Hadoop依赖项(例如HDFS访问),请将这些依赖项的scope配置为

test 或则 provided 。

Flink使用Java的Service Provider Interfaces (SPI) 机制通过特定标识符加载table的connector/format工厂。由于每个table的connector/format的名为orgapacheflinktablefactoriesFactory的SPI资源文件位于同一目录:META-INF/services下,因此在构建使用多个table connector/format的项目的uber jar时,这些资源文件将相互覆盖,这将导致Flink无法正确加载工厂类。

在这种情况下,推荐的方法是通过maven shade插件的ServicesResourceTransformer转换META-INF/services目录下的这些资源文件。给定示例的pomxml文件内容如下,其中包含连接器flink-sql-connector-hive-312和flink-parquet format。

在配置了ServicesResourceTransformer之后, 项目构建uber-jar时,META-INF/services目录下的这些资源文件会被整合在一起而不是相互覆盖。

强烈建议使用该方式进行配置,可以减少很多重复的配置工作。

唯一的环境要求是安装了Maven 304(或更高版本)和Java 8x。

使用以下两种方式中的一种创建项目 :

这允许您命名新创建的项目。它将以交互方式要求您输入groupId、artifactId和包名。

我们建议您将此项目导入IDE以开发和测试它。IntelliJ IDEA原生支持Maven项目。如果使用Eclipse,可以使用m2e插件导入Maven项目。默认情况下,某些Eclipse捆绑包包含该插件,否则需要您手动安装。

请注意 :默认的Java JVM heap size对于Flink来说可能太小了。你必须手动增加它。在Eclipse中,选择RunConfigurations->Arguments并写入VM Arguments框:-Xmx800m。在IntelliJ IDEA中,更改JVM选项的推荐方法是使用Help | Edit Custom VM Options选项菜单。细节见这篇文章

如果要生成/打包项目,请转到项目目录并运行"mvn clean package"命令。执行后将会得到一个JAR文件:target/-jar,其中包含您的应用程序,以及作为依赖项添加到应用程序的连接器和库。

注意 :如果使用与StreamingJob不同的类作为应用程序的主类/入口点,我们建议您相应地更改pomxml文件中的mainClass设置。这样,Flink就可以直接从JAR文件运行应用程序,而无需另外指定主类。

要构建包含连接器和库所需的所有依赖项的应用程序JAR,可以使用以下shade插件定义:

原文链接:301 Moved Permanently

以上就是关于命令行运行java程序,引入的其他jar包时,如何解决全部的内容,包括:命令行运行java程序,引入的其他jar包时,如何解决、java中应用了外部jar的程序要怎么打包成jar急急急、IDEA打包jar程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/zz/10214873.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-06
下一篇2023-05-06

发表评论

登录后才能评论

评论列表(0条)

    保存