maven install后,java -jar XXXX.jar运行---找不到主类问题 以及 虚拟机中执行jar包后 访问页面出现Java heap space等其他问题
这是前几天遇到的问题了,当天晚上想写下来来着,后来有事情就一直搁置到现在了。由于我想将SpringCloud项目都导出jar包在虚拟机上运行,然后本地访问,所以先将SpringCloud中的注册中心项目右击run as,maven install,然后进入对应的目录执行java -jar XXX.jar,报错显示:没有主类(主清单),网上查了下,这种情况需要在pom.xml依赖文件中添加如下代码.
这是前几天遇到的问题了,当天晚上想写下来来着,后来有事情就一直搁置到现在了。
由于我想将SpringCloud项目都导出jar包在虚拟机上运行,然后本地访问,所以先将SpringCloud中的注册中心项目右击run as,maven install,然后进入对应的目录执行java -jar XXX.jar,报错显示:没有主类(主清单),网上查了下,这种情况需要在pom.xml依赖文件中添加如下代码:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptorRefs>
<descriptorRef>
jar-with-dependencies
</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
</plugins>
</build>
此代码是参照网上写的,至于哪一个博客不记得了。。总之要有spring-boot-maven-plugin这个插件。
添加之后,再右击项目run as->maven build,在goal中写入assembly:assembly,
但执行jar包还是报错了:
Could not find goal ‘assembly’ in plugin org.apache.maven.plugins:maven-assembly-plugin:3.1.0 among available goals help, single -> [Help 1]
在百度上找了好多资料都说的是用该命令时:mvn install:install-file -Dfile,在 install:后面多加了空格,但是我是直接鼠标点击,选项输入的啊。
再一次在谷歌中搜索,发现在新版本的maven-assembly-plugin插件中assembly:assembly已经被移除了,现在改为assembly:single。
此时再执行jar包,然而。。。还有错,,哭泣。。。
此时报错:Java heap space -> [Help 1](堆栈溢出—JVM)
后面再尝试,eclipse中又出现了新的错误:GC overhead limit exceeded,查了下原因可能是:
加载了太多资源到内存,本地的性能也不好,gc时间消耗的较多。
然后参照博客的解决方案,修改eclipse.ini文件,增加参数,-XX:-UseGCOverheadLimit,即表示关闭这个特性,同时增加heap大小,-Xmx1024m, 然而并没有什么用,反而增大了Xms之后,一旦build之后,eclipse占用内存很大。
后来又看到有个网友回答server clean啥的,但是博主说这个不能解决实际问题。于是我在虚拟机中尝试了mvn clean(这个操作是build success的),再运行mvn compile assembly:single,依旧报错:
[ERROR] Java heap space -> [Help 1]
java.lang.OutOfMemoryError: Java heap space
at java.lang.StringCoding$StringDecoder.decode (StringCoding.java:149)
at java.lang.StringCoding.decode (StringCoding.java:193)
at java.lang.String.<init> (String.java:426)
at java.util.jar.Manifest.parseName (Manifest.java:304)
at java.util.jar.Manifest.read (Manifest.java:258)
at sun.security.util.SignatureFileVerifier.processImpl (SignatureFileVerifier.java:276)
at sun.security.util.SignatureFileVerifier.process (SignatureFileVerifier.java:263)
at java.util.jar.JarVerifier.processEntry (JarVerifier.java:318)
at java.util.jar.JarVerifier.update (JarVerifier.java:230)
at java.util.jar.JarFile.initializeVerifier (JarFile.java:383)
at java.util.jar.JarFile.getInputStream (JarFile.java:450)
at sun.net.www.protocol.jar.JarURLConnection.getInputStream (JarURLConnection.java:164)
at org.codehaus.plexus.components.io.resources.PlexusIoURLResource.getContents (PlexusIoURLResource.java:43)
at org.codehaus.plexus.components.io.resources.Deferred.getContents (Deferred.java:60)
at org.codehaus.plexus.components.io.resources.proxy.ResourceInvocationHandler.invoke (ResourceInvocationHandler.java:66)
at com.sun.proxy.$Proxy33.getContents (Unknown Source)
at org.codehaus.plexus.archiver.ArchiveEntry.getInputStream (ArchiveEntry.java:137)
at org.codehaus.plexus.archiver.zip.AbstractZipArchiver$1.get (AbstractZipArchiver.java:550)
at org.codehaus.plexus.archiver.zip.ConcurrentJarCreator.createEntry (ConcurrentJarCreator.java:276)
at org.codehaus.plexus.archiver.zip.ConcurrentJarCreator.addArchiveEntry (ConcurrentJarCreator.java:196)
at org.codehaus.plexus.archiver.zip.AbstractZipArchiver.zipFile (AbstractZipArchiver.java:512)
at org.codehaus.plexus.archiver.jar.JarArchiver.zipFile (JarArchiver.java:501)
at org.codehaus.plexus.archiver.zip.AbstractZipArchiver.zipFile (AbstractZipArchiver.java:561)
at org.codehaus.plexus.archiver.zip.AbstractZipArchiver.addResources (AbstractZipArchiver.java:421)
at org.codehaus.plexus.archiver.zip.AbstractZipArchiver.createArchiveMain (AbstractZipArchiver.java:331)
at org.codehaus.plexus.archiver.zip.AbstractZipArchiver.execute (AbstractZipArchiver.java:234)
at org.codehaus.plexus.archiver.AbstractArchiver.createArchive (AbstractArchiver.java:987)
at org.apache.maven.plugins.assembly.archive.archiver.AssemblyProxyArchiver.createArchive (AssemblyProxyArchiver.java:445)
at org.apache.maven.plugins.assembly.archive.DefaultAssemblyArchiver.createArchive (DefaultAssemblyArchiver.java:184)
at org.apache.maven.plugins.assembly.mojos.AbstractAssemblyMojo.execute (AbstractAssemblyMojo.java:478)
at org.apache.maven.plugins.assembly.mojos.SingleAssemblyMojo.execute (SingleAssemblyMojo.java:61)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:137)
[ERROR]
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/OutOfMemoryError
后来联想到之前运行过的一个项目,于是改了执行命令为:先mvn compile,后mvn package,
这次终于build success,访问注册中心的地址,没有问题了。同样的,在eclipse下,
右击项目run as–>maven build,在goal中先compile执行后,再同样的步骤,在goal中输入package即可。
或者直接输入compile package一次性执行。
至此告一段落,再导入另外一个服务的项目jar包,虽然最后提示的是build success,但是过程中出现提示:
XXX.java使用了未经检查或不安全的操作。有关详细信息, 请使用 -Xlint:unchecked 重新编译。
在浏览器访问相关页面,发现功能不能正常使用,报500错误。
于是百度查询一下(参考链接https://blog.51cto.com/1306733/1744501),可能是需要定义范型类型然后再使用,如下:
1、ArrayList al=new ArrayList();
2、方法前加入@SuppressWarnings(“unchecked”)
于是将XXX.java里的关于List和ArrayList做统一,然而并不是这个错误,后来发现是代码中出现黄色警告的问题,于是在方法前添加了@SuppressWarnings(“unchecked”),现在可以build success,但是页面功能还是不能正常使用,报错:Could not initialize class XXX。这个错误之前出现过,应该是没有读取到properties配置文件,也不知道为啥突然报这个错误,毕竟现在项目在eclipse中运行好好的。报的警告提示是:No URLs will be polled as dynamic configuration sources
再一次!百度查询,默认classpath不指定情况下,会在应用的 classpath 中寻找一个名为 config.properties 的文件并读取其内容作为配置属性。所以,将配置文件名称改为默认的config.properties。
于是再次重新打jar包,访问页面,功能可以正常运行(Windows下的cmd中进入对应目录执行命令运行)。
emmm…然而我在虚拟机中执行命令java -jar XXX.jar运行后,访问页面,还是报错Java heap space。
我。。。。。。。。。。。。。。。。。。。。。。。
后来改了环境变量里的参数,将其改大一些(网上基本是这样说的),然而这些没有用!!!
最后发现是分配给虚拟机的内存太小了==|||,电脑是16G运行内存,只分了2个G给虚拟机,将其改为4个G之后就没得问题了。。。。感觉自己好蠢啊。。。。o(╥﹏╥)o
更多推荐
所有评论(0)