eclipse成功时,Maven编译失败

ron*_*onk 7 eclipse sun jar pom.xml maven

我在Windows XP上使用maven3.03和Eclipse 3.5.我将旧的Web项目转换为maven配置样式.
当我在eclipse中编译项目时,所有编译.
注意:类路径包含:Maven依赖项和JDK(1.6_018).
当我使用mvn从命令行编译时,我得到的错误很少:
1.package com.sun.xml.internal.stream.buffer.stax不存在.
2.package com.sun.xml.internal.stream.writers不存在
3.无法找到符号 - 符号:class XMLDOMWriterImpl
4.package com.sun.xml.internal.messaging.saaj.util不存在
5.package com .sun.xml.internal.bind.v2.runtime.unmarshaller不存在
6.无法找到符号 - 符号:class NamespaceContexHelper
7.无法找到符号符号:class ByteOutputStream

我可以看到这个东西与阳光罐.但我只是无法理解为什么eclipse是好的而且命令行不是.

编辑:我在上面的列表中没有提到的错误之一是:

[ERROR]<path>\EventsViewer.java:[54,69] inconvertible types found: <br>java.util.SortedMap<java.util.Date,java.util.List<com.myClass>>
required: java.util.Map<? extends java.util.Date,? extends java.util.List<com.myOtherClass>>
Run Code Online (Sandbox Code Playgroud)


当我在日食中看到同一行时,我得到警告:

Type safety: Unchecked cast from SortedMap<Date,List<myClass>> to Map<? extends Date,? extends 
 List<myOtherClass>>
Run Code Online (Sandbox Code Playgroud)

在Eclipse中我得到警告,在maven中我得到错误.我检查了org.eclipse.jdt.core.prefs并看到设置是org.eclipse.jdt.core.compiler.problem.forbiddenReference = warning.

更新:我读到了上面的一些错误."问题"是在eclipse中它显示为未使用的导入.Stangly maven将此报告为错误.删除此未使用的导入后,错误消失了.但问题3和7仍然存在

结论:我猜这些警告会成为javac中的错误.因为我不使用任何supressWarnings.我很惊讶错误是不同的.它是什么?

小智 9

这可能是maven论坛答案的真正原因

"Jerome是对的,不建议使用rt.jar中的com.sun类.尤其是那些标有"内部"的类;你只是在寻找麻烦.

但是我很好奇,所以试了一下.Eclipse确实可以访问上面的类.但是,使用javac在命令行上编译代码失败,并显示"不存在"错误.所以我的假设是Sun的java编译器会检测何时访问一个特殊的"内部"类,并拒绝导入该类.Eclipse使用不同的编译器,可能没有这个检查.

Maven只使用系统执行路径中提供的javac编译器.因此问题根本与Maven无关.这是maven正在调用的编译器,它拒绝编译源代码.我无法在javac命令行中看到任何公共标志来禁用内部访问的"阻塞",所以除非你想避免使用Sun的javac编译器,否则你只需要避免使用这个内部类.

只是为了好玩,我尝试了杰罗姆关于将rt.jar放在类路径上的建议:javac -cp /usr/java/jdk1.6.0_03/jre/lib/rt.jar Foo.java但仍然无法编译.

ByteOutputStream类可以在运行时通过Class.forName("..")加载.

有趣的是,我正在研究的项目确实发生了导入类com.sun.org.apache.xml.internal.utils.SAXSourceLocator; 这个工作正常.发出警告,但代码编译(是的,它在我的TODO列表上修复此问题:-).因此,并非所有内部类都被阻止,只是被选中."


Jea*_*sky 2

仔细检查 Eclipse 和 Maven 构建是否使用相同的 JDK。即使您认为自己是这样,也请再次检查一遍。

这些包是某些版本的 Java 中包含的包,而其他版本则不包含这些包。