maven遇到的问题总结
1. Missing artifact jdk.tools jdk.tools jar 1.8
新建的项目遇到的问题: pom.xml文件报错. 提示: Missing artifact jdk.tools:jdk.tools:jar:1.8
报错原因:tools.jar包是JDK自带的,pom.xml中依赖的的jar包隐式依赖tools.jar包,而tools.jar并未在库中,
只需要将tools.jar包添加到jdk库中即可。
解决方案:在pom文件中添加如下代码即可:
<dependency>
<groupId>jdk
.tools
</groupId
>
<artifactId>jdk
.tools
</artifactId
>
<version>1.8</version
>
<scope>system
</scope
>
<systemPath>$
{JAVA_HOME
}/lib
/tools
.jarsy
</stemPath
>
</dependency
>
如下,为解决之后的截图:
2. maven项目打包遇到问题:No goals have been specified for this build
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-spxmrvJF-1601360316073)(https://i.loli.net/2018/10/10/5bbd8b6291015.png)]
解决方案一 : 在 pom.xml的 build标签里面,添加如下标签即可 :
<defaultGoal>compile
</defaultGoal
>
即
:
<build>
<defaultGoal>compile
</defaultGoal
>
</build
>
解决方案二 : 右键项目-->run as --> maven build, 如下图所示 :
在弹出框的Goals属性里面,输入complie-->点击Run即可!
3. 使用eclipse为maven打包报错 : [ERROR] Failed to execute goal org.apache.maven.plugins:maven-shade-plugin:2.4.3:shade (default) on project com.project.name: Error creating shaded jar: invalid LOC header (bad signature) -> [Help 1]
详细报错信息
:
org
.apache
.maven
.lifecycle
.LifecycleExecutionException
: Failed to execute goal org
.apache
.maven
.plugins
:maven
-shade
-plugin
:2.3:shade
(default) on project bigdata
: Error creating shaded jar
: invalid LOC header
(bad signature
)
at org
.apache
.maven
.lifecycle
.internal
.MojoExecutor
.execute
(MojoExecutor
.java
:213)
at org
.apache
.maven
.lifecycle
.internal
.MojoExecutor
.execute
(MojoExecutor
.java
:154)
at org
.apache
.maven
.lifecycle
.internal
.MojoExecutor
.execute
(MojoExecutor
.java
:146)
at org
.apache
.maven
.lifecycle
.internal
.LifecycleModuleBuilder
.buildProject
(LifecycleModuleBuilder
.java
:117)
at org
.apache
.maven
.lifecycle
.internal
.LifecycleModuleBuilder
.buildProject
(LifecycleModuleBuilder
.java
:81)
at org
.apache
.maven
.lifecycle
.internal
.builder
.singlethreaded
.SingleThreadedBuilder
.build
(SingleThreadedBuilder
.java
:56)
at org
.apache
.maven
.lifecycle
.internal
.LifecycleStarter
.execute
(LifecycleStarter
.java
:128)
at org
.apache
.maven
.DefaultMaven
.doExecute
(DefaultMaven
.java
:305)
at org
.apache
.maven
.DefaultMaven
.doExecute
(DefaultMaven
.java
:192)
at org
.apache
.maven
.DefaultMaven
.execute
(DefaultMaven
.java
:105)
at org
.apache
.maven
.cli
.MavenCli
.execute
(MavenCli
.java
:954)
at org
.apache
.maven
.cli
.MavenCli
.doMain
(MavenCli
.java
:288)
at org
.apache
.maven
.cli
.MavenCli
.main
(MavenCli
.java
:192)
at sun
.reflect
.NativeMethodAccessorImpl
.invoke0
(Native Method
)
at sun
.reflect
.NativeMethodAccessorImpl
.invoke
(NativeMethodAccessorImpl
.java
:62)
at sun
.reflect
.DelegatingMethodAccessorImpl
.invoke
(DelegatingMethodAccessorImpl
.java
:43)
at java
.lang
.reflect
.Method
.invoke
(Method
.java
:498)
at org
.codehaus
.plexus
.classworlds
.launcher
.Launcher
.launchEnhanced
(Launcher
.java
:289)
at org
.codehaus
.plexus
.classworlds
.launcher
.Launcher
.launch
(Launcher
.java
:229)
at org
.codehaus
.plexus
.classworlds
.launcher
.Launcher
.mainWithExitCode
(Launcher
.java
:415)
at org
.codehaus
.plexus
.classworlds
.launcher
.Launcher
.main
(Launcher
.java
:356)
解决方法 : 在执行参数里 添加 -X 查看Maven clean 和 Maven install 过程的详细输出日志
或者在项目跟路径下使用命令行执行:
mvn clean install -DskipTests -X //执行clean,install过程,打印详细日志并跳过单元测试
仔细查找日志,发现如下报错信息 :
去该报错目录下查看 : 出错的jar包果然有问题, 删除掉该jar包目录,重新打包即可!
注 : maven项目编译时, 经常会出现部分jar包不能正常下载的问题,国内的用户建议使用阿里云镜像
打包好maven项目,执行的时候报错 : jar中没有主清单属性
报错详情 : [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-66jklP3a-1601360316083)(https://i.loli.net/2018/11/06/5be0e3c80f14f.png)] 原因: 打包的时候没有添加主类,或者是没有正确的添加主类导致 解决方案 : 用压缩文件打开jar包,发现下面有个META-INF目录,如下图:
打开该文件夹,查看里面的MANIFEST.MF文件,发现里面并没有指定主类: 文件内容如下所示:
修改MANIFEST.MF文件, 添加上如下的属性:
Main-Class: 类的完全限定名(不要带class或者java后缀) // Main-Class: 后面要有空格
再次执行jar包即可!
如上:问题得到解决,但是真正的疑问在于:我的pom.xml文件里面命名指定了主类,为什么打jar包的时候不会打进去呢?而且,对于同时生成的另一个jar包hdfs_explorer-1.0-SNAPSHOT.jar却是可以直接运行的?
我找到了之前自己使用的maven项目,打成jar包,发现所有的original-*-1.0-SNAPSHOT.jar中的MANIFEST.MF文件中都是没有主类配置的,而另一个jar包里面却有 去官网查看了几个示例: 官网示例链接如下: 并参照了一个大神的详细讲解:您不知道的五件事 original-*-1.0-SNAPSHOT.jar这种jar包确实不会将主类信息添加进去,如果确实需要执行这个jar包,要手动修改MANIFEST.MF文件指定主类
4. maven报错 : Error:java: Annotation processing is not supported for module cycles. Please ensure that all modules from cycle [A,B] are excluded from annotation processing
报错原因 : 对于比较复杂的项目来说,项目之间可能存在各种依赖关系,这种错误出现的原因就是
项目之间的循环依赖 即A依赖B的同时,B也依赖A.
解决办法 : 理清项目之间的关系,去除循环依赖
5. idea使用maven遇到的jar包不能完全下载的办法
在导入maven项目的时候,遇到如下问题 : 有几个jar包总是不能正常下载 :
首先检查idea的maven相关配置是否有误 :
操作方式 : File-->setting-->搜索maven,我的配置如下图,可以看到是没有问题的
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lCOIsyDh-1601360316092)(https://i.loli.net/2019/04/12/5cafed48ba41a.png)] 配置没问题,那就重新下载! 发现那几个jar包仍然没有下载下来. 那是不是仓库里面没有这个jar包呢? 我登录私仓的仓库,发现是存在相关jar包的.
最终,我通过这样的方式解决了问题:
在idea右测点击maven框,点击m图标(Maven Goal),如下图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fCLV2Aqc-1601360316093)(https://i.loli.net/2019/04/12/5cafefafa104e.png)]
会弹出以下框,选择好需要下载jar包的项目路径 输入命令 : mvn -U idea:idea
之后就会开始下载jar包,问题得到解决!!
6. maven下载依赖报错:PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: un able to find valid certification path to requested target
执行命令maven clean install报错,详情如下:
Could not find artifact org
.glassfish
:javax
.el
:pom
:3.0.1-b06
-SNAPSHOT in lls
-repository
(http
://nexus
.linklogis
.cn
/nexus
/content
/groups
/public/)
Downloading from aliyun
-proxy
: https
://maven
.aliyun
.com
/repository
/public/org
/apache
/maven
/plugins
/maven
-compiler
-plugin
/maven
-metadata
.xml
[WARNING
] Could not transfer metadata org
.apache
.maven
.plugins
:maven
-compiler
-plugin
/maven
-metadata
.xml from
/to aliyun
-proxy
(https
://maven
.aliyun
.com
/r epository
/public/):
sun
.security
.validator
.ValidatorException
:
PKIX path building failed
: sun
.security
.provider
.certpath
.SunCertPathBuilderException
: un able to find valid certification path to requested target
报错原因: 阿里云中央仓库地址更新为了https,所以下载时需要ssl认证
解决方案:
我们可以忽略ssl检查导致的问题,我们可以直接忽略该检查使用命令: 在项目路径下打开终端命令:
mvn clean
install -Dmaven.wagon.http.ssl.insecure
=true -Dmaven.wagon.http.ssl.allowall
=true
我们也可以在IDEA的导入器的vm选项加上这段命令,这样我们也可以通过reimport自动下载maven依赖了,不用在terminal手动输入maven命令了
File
-->Settings
-->(搜索框输入Impoating
)-->设置VM options
如下图: