2011-07-03 190 views
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不存在。 XMLDOMWriterImpl
四,包装com.sun.xml.internal.messaging.saaj.util确实类:象征 -
2.包装com.sun.xml.internal.stream.writers不存在
3.cannot找到符号不存在
五,包装com.sun.xml.internal.bind.v2.runtime.unmarshaller不存在
6.cannot找到符号 - 符号:类NamespaceContexHelper
7.cannot找到符号符号:类ByteOutputStreameclipse成功时Maven编译失败

我可以看到这个东西与太阳罐。但我不明白为什么日食是好的,命令行不是。

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

[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。我很惊讶,错误是不同的。 这是什么?

+0

很可能是您在Maven环境中设置的'JAVA_HOME' isnt' –

+0

您运行Maven和Eclipse的平台是什么? – Arpit

回答

2

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

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

+0

如果Java版本不同,请添加maven-compiler-plugin源和目标的配置指向1。6并且从Maven项目上下文菜单更新项目配置将在很多情况下解决问题 – Omnaest

+0

要说清楚,我正在讨论的是使用Java的实际目录,而不是Java 5 vs Java 6 –

+0

好吧,我添加了它作为单独的答案,不要混淆某人 – Omnaest

0

如果Java版本不同,与源和目标对1指向的结构添加 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> 

。6 更新从Maven项目上下文菜单中的项目配置将解决在许多情况下,不同步的问题(这会导致不同的编译结果):

enter image description here

+0

谢谢。我在你写的时候试过了maven-compiler-plugin,它没有帮助。我没有尝试你的第二个建议(“更新项目配置”)(它有时候会以一种奇怪的方式改变我的.classpath),但我会再试一次,让你知道。再次感谢。 – ronk

+0

没有工作。奇怪的是,它使用J2SE_1.6来更改.classpath文件,而不是使用JDK1.6_018的eclipse。 – ronk

9

这也许是真正的原因 from maven forum's answer

“杰罗姆是正确的,它不是建议的做法,从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列表来解决这个问题:-)。所以这不是所有内部类别 被阻止,只是选定的。 “

0

这是我的情况:我已经加入//TODO后得到的IntelliJ中同样的错误,自动的IntelliJ增加进口部分import com.sun.xml.internal.bind.v2.TODO;

此行除上述进口线后,问题解决了现在,我可以。能够使用maven成功编译