Maven问题解决记录:
1、远程仓库中有jar,但是编译时找不到。
问题描述:
Failed to execute goal on project amps-dcm: Could not resolve dependencies for project com.zollty.pss:amps-dcm:war:0.0.1-SNAPSHOT: The following artifacts could not be resolved: org.zollty.util:zollty-util:jar:1.0, org.zollty.log:zollty-log:jar:1.0: Failure to find org.zollty.util:zollty-util:jar:1.0 in http://172.27.18.106:8081/nexus/content/groups/public was cached in the local repository, resolution will not be reattempted until the update interval of LocalMirrorId has elapsed or updates are forced -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR]
解决方案:
打开本地仓库目录,找到那个jar的位置,把残留的文件夹全都删除。然后再重新下载这个jar。
还是不行?有可能是parent项目中也存在xxx.lastUpdate的文件。所以把parent项目也清理一下。
例如:
那么,请检查
D:\C\Java\maven3\repo\org\zollty\zollty-org\1.0目录!!
2、transitive dependencies (if any) will not be available, enable debug logging for more details
详细错误如下:
[WARNING] The POM for org.zollty.util:zollty-util:jar:1.0 is invalid, transitive dependencies (if any) will not be available, enable debug logging for more details
解决方法: 显式引入:zollty-util:jar:1.0依赖的jar即可。
3、如何将Maven依赖的jar发布到tomcat的WEB-INF/lib下面
在.classpath文件中设置:
注意,有些插件是:
4、配置了拷贝(overlays)引入的war包的Eclipse-Maven 项目,当发布到服务器上时,没有拷贝到war中的文件到发布的服务器上。
pom配置如下:
org.apache.maven.plugins
maven-war-plugin
2.1.1
true
com.zollty.pss
abframe
原因: 没有配置支持overlays的Eclipse插件,即m2e-wtp插件。
有些Eclipse插件是这样
.project文件
...
...
.classpath 文件
但是有些Eclipse插件是这样
.project文件
...
...
.classpath 文件
经测试,第二个配置可以正确使用maven的war包依赖自动发布的功能。
如果是第一个配置,那需要安装m2e-wtp插件。
安装后,完整的配置如下
.project文件
|
.classpath 文件
|
5、maven 无法确定
无法确定
原因是,默认编译器(javac)的问题。解决方案:使用其他编译器,比如eclipse所用的编译器(JDT compiler from eclipse)。
在pom.xml中配置如下:
参见:
http://www.eclipse.org/forums/index.php/t/1229/
6、使用JDT compiler时出现 枚举类型switch报错 问题:
Cannot switch on a value of type. Only convertible int values or enum variables are permitted
例如:
|
分析和解决方法:
Turns out that the setting org.eclipse.jdt.core.compiler.compliance
needs to be set to the target version in order for it to be able to recognize java.lang.Enum
.
This setting is only set by plexus-compiler-eclipse when both targetVersion
AND optimize
is set. [1]
Modify your pom like this and it should work:
|
I'm not sure why it was decided in plexus-compiler-eclipse that optimization would affect the compliance level, so this is in fact a workaround.
see:
https://github.com/sonatype/plexus-compiler/blob/master/plexus-compilers/plexus-compiler-eclipse/src/main/java/org/codehaus/plexus/compiler/eclipse/EclipseJavaCompiler.java#L156
7、Maven报错:'version' contains an expression but should be a constant.
是因为 父pom还没有发布到仓库中,建议在仓库中检查一下父pom是否正确。
8、Maven WTP无法引用工程中的项目模块(org.eclipse.wst.common.component)
也就是说,在org.eclipse.wst.common.component文件中缺少如下的语句:
那是因为 被引用的项目的pom配置有问题,经我检查,问题出在如下一行
但是,在这个目录下面,找不到任何 .xsd 文件,运行maven指令的时候不会报错,但是在这个WTP中就检测到了这个问题,所以没有生成这个引用。
9、报错:No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?
原因:JRE环境指定的是JRE目录,而不是JDK目录。
解决方法:
● Click on Windows -> Preferences -> Java -> Installed JREs -> Add -> Standard VM and Select JAVA_HOME.
● Select New JRE from Installed JREs and Press OK