eclipse成功时Maven编译失败

eclipse成功时Maven编译失败,eclipse,maven,jar,sun,pom.xml,Eclipse,Maven,Jar,Sun,Pom.xml,我在WindowsXP上使用maven3.03和Eclipse3.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.找不到符号-

我在WindowsXP上使用maven3.03和Eclipse3.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.找不到符号-符号:类XMLDOMWriterImpl
4.package com.sun.xml.internal.messaging.saaj.util不存在
5.package com.sun.xml.internal.bind.v2.runtime.unmarshaller不存在
6.找不到符号-符号:类名称空间ContexHelper
7.找不到符号:类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>>
[ERROR]\EventsViewer.java:[54,69]找到不可转换的类型:
java.util.SortedMap
必需:java.util.Map仔细检查您在Eclipse和Maven构建中使用的JDK是否相同。即使你认为你是,再仔细检查一遍


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

如果Java版本不同,请添加


org.apache.maven.plugins
maven编译器插件
2.3.1
1.6
1.6
UTF-8
源和目标的配置指向1.6和 从Maven项目上下文菜单更新项目配置将在许多情况下解决不同步问题(这会导致不同的编译结果):


这可能是真正的原因

“Jerome是对的,不建议使用com.sun 来自rt.jar的类,尤其是标记为“internal”的类;您只需要 自找麻烦

但是我对此很好奇,所以尝试了一下。上面的课程可以 确实可以被Eclipse访问 使用javac的命令行失败,出现“不存在”错误 假设Sun的java编译器检测到 正在访问“内部”类,并拒绝导入该类。 Eclipse使用不同的编译器,该编译器可能没有此检查

Maven只使用系统执行中可用的javac编译器 因此,问题根本与Maven无关,而是 maven正在调用的编译器拒绝编译源代码。 我在javac命令行中看不到任何公共标志来禁用此功能 “阻止”内部访问,所以除非您想避免使用Sun的 javac编译器您只需避免使用这个内部类

只是为了好玩,我尝试了Jerome的建议,把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
后,IntelliJ在导入部分
import com.sun.xml.internal.bind.v2.TODO中自动添加了这一行


删除上述导入行后,问题得到解决。现在我可以使用maven成功编译了

很可能您的
JAVA\u HOME
isnt'设置在maven环境中。您运行maven和Eclipse的平台是什么?+1如果JAVA版本不同,添加maven编译器插件,使源和目标的配置指向1.6,并从maven项目上下文菜单更新项目配置,将在许多情况下解决问题,我说的是Java正在使用的实际目录,而不是Java 5 vs Java 6Ok我添加了它作为单独的答案以避免混淆某人Jeanne,我不明白-你说的“包含在Java的某些版本中而不是其他版本中”和“实际目录”是什么意思?IBM喜欢在JDK中包含不应该/不应该在运行时的内容。这意味着,如果您使用IBMJDK编译,情况似乎很好,当您使用另一个JDK编译时,类就会丢失。谢谢。我在您编写时尝试了maven编译器插件,但没有任何帮助。我没有尝试你的第二个建议(“更新项目配置”)(它有时会以一种奇怪的方式更改我的.classpath),但我会再试一次并让你知道。再次感谢,没用。奇怪的是,它使用J2SE_1.6更改了.classpath文件,而不是使用JDK1.6_018的eclipse。
Type safety: Unchecked cast from SortedMap<Date,List<myClass>> to Map<? extends Date,? extends 
 List<myOtherClass>>
<build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.3.1</version>
                <configuration>
                    <target>1.6</target>
                    <source>1.6</source>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
        </plugins>
    </build>