7

我在 Windows XP 上使用 maven3.03 和 Eclipse 3.5。我将旧的 Web 项目转换为 Maven 配置样式。
当我在eclipse中编译项目时,一切都会编译。
注意:类路径包含:Maven Dependencies 和 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.找不到符号 - 符号:类 NamespaceContexHelper
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>>


当我在 eclipse 中看到同一行时,我收到警告:

Type safety: Unchecked cast from SortedMap<Date,List<myClass>> to Map<? extends Date,? extends 
 List<myOtherClass>>

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

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

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

4

4 回答 4

9

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

” Jerome 是对的,不建议使用 rt.jar 中的 com.sun 类。尤其是那些标记为“内部”的类;你只是在自找麻烦。

不过我很好奇这个,所以试了一下。上面的类确实可以被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("..") 加载。

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

于 2014-03-10T15:20:23.110 回答
2

仔细检查您对 Eclipse 和 Maven 构建使用相同的 JDK。即使你认为你是,无论如何都要再次检查。

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

于 2011-07-03T15:01:09.100 回答
0

如果java版本不同,添加 maven-compiler-plugin

<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>

源和目标的配置指向 1.6 并从 Maven 项目上下文菜单更新项目配置将解决许多情况下的不同步问题(导致不同的编译结果):

在此处输入图像描述

于 2011-07-03T18:26:34.820 回答
0

这是我的情况:添加后我在 IntelliJ 中遇到了同样的错误,Intellij //TODOAutomatically added this line in import sectionimport com.sun.xml.internal.bind.v2.TODO;

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

于 2016-03-15T23:00:50.723 回答