网站广告下悬浮代码怎么做,wordpress博客建设与经营,全球电子商务公司排行,长沙旅游必去十大景点用maven把普通java项目打包成可运行的jar后#xff0c;打开cmd用java -jar运行此jar包时报错#xff1a; 用idea运行该项目则没有问题 。
其实原因很简单#xff0c;我们忽略了2个细节。 java指令默认在寻找class文件的地址是通过CLASSPATH环境变量中指定的目录中寻找的。我…用maven把普通java项目打包成可运行的jar后打开cmd用java -jar运行此jar包时报错 用idea运行该项目则没有问题 。
其实原因很简单我们忽略了2个细节。 java指令默认在寻找class文件的地址是通过CLASSPATH环境变量中指定的目录中寻找的。我们忽略了package的影响。 第一个问题好解决
我们直接在CLASSPATH环境变量中加入“.;”即可。“.”的意思是搜索当前目录。
或者把JAVA_HOME路径改成项目的jdk版本。
第二个问题看下面分析
看下面两个类 类A 类B
类A和类B的唯一差别就是没有定义包名。
我们的工程路径是D:\HelloWorld,在HelloWorld文件夹中建立一个src文件夹类B的源代码文件就放在src中。用javac编译完以后
会在src文件夹中生成NewsManager.class,如下 执行如下 现在我们再把源代码换成类A 为什么加入了package后就不对了呢
类A中package的路径是org.will.app.main。按照java规定我们应该按照package定义的路径来存放源文件类A应该放入
src\org\will\app\main下如下 然后我们编译执行 依然有问题为什么其实大家再回去看看java的书籍就会发现一个类的全名应该是包名类名。类A的全名org.will.app.main.NewsManager
好的再试试 还是不对。为什么
仔细看上面的图我们在main目录下让java命令去执行org.will.app.main.NewsManager,其实它会以为类的路径是
D:\HelloWorld\src\org\will\app\main\org\will\app\main\NewsManager大家看到了吧路径重复了。
所以我们应该这样执行 成功
总结
一、java执行class文件是根据CLASSPATH指定的地方来找不是我们理解当前目录。如果希望它查询当前目录需要在CLASSPATH中加入“.;”,代表当前目录。
二、java执行class文件对package的路径是强依赖的。它在执行的时候会严格以当前用户路径为基础按照package指定的包路径转化为文件路径去搜索class文件。各位同学以后注意就OK啦。至于网上说的要在CLASSPATH要加各种包等等都是泛泛而谈真正静下心分析这个问题的资料不多。很多都没有说到点子上会误导人的。 参考文章
使用java命令运行class文件提示“错误找不到或无法加载主类“的问题分析 - 大C - 博客园 (cnblogs.com) 使用maven将普通项目打包成可执行jar文件
1、引入打包插件
buildpluginspluginartifactIdmaven-assembly-plugin/artifactIdconfigurationdescriptorRefsdescriptorRefjar-with-dependencies/descriptorRef/descriptorRefsarchivemanifestmainClasscom.jamy.song.job.Demo/mainClass/manifest/archive/configurationexecutionsexecutionidmake-assembly/idphasepackage/phasegoalsgoalsingle/goal/goals/execution/executions/plugin/plugins/build
2、使用maven的clean和package命令。先clean后package即可。 with-dependencies.jar结尾的文件就是可执行jar文件。第一个jar文件为不可执行的jar文件