求java大神帮忙,java使用MAVEN编译时提示找不到类,但是类是属于rt.jar的

求java大神帮忙,java使用MAVEN编译时提示找不到类,但是类是属于rt.jar的
java 版本: 1.6.0_10-rc2
maven 版本: 3.0.4
maven编译插件
org.apache.maven.plugins
maven-compiler-plugin

1.6
1.6 utf8

运行mvn clean compile后build failure,
错误原因:
ECG2ServiceImpl.java:18: package com.sun.org.apache.xml.internal.security.exceptions does not exist
ECG2ServiceImpl.java:19: package com.sun.org.apache.xml.internal.security.utils does not exist
这2个类是属于rt.jar里的,也就是JRE里的,为什么会引用不到呢?

已经尝试过在pom中添加

${JAVA_HOME}/lib/rt.jar

也没有效果,求助!

阅读 11.6k
3 个回答

自己写的程序是不建议用com.sun这个玩意儿的。。这东西属于“Deprecated and restricted API”。。
而且各种com.sun的包现在都有替代品。。
据说:如果是公司的老项目非用不可,可以用eclipse导入maven,properties-> Java Compiler -> Errors/Warnings -> Deprecated and restricted API ->
Forbidden reference -> "error" 改成 "warning"
还据说:jdk5是可以用这个api的,jdk6之后就不能用了,只能用java,javax开头的api。

clipboard.png
被sun坑了

在maven-compiler-plugin增加compilerArguments配置,引入rt.jar的类。

<plugin>
         <artifactId>maven-compiler-plugin</artifactId>
         <version>3.5.1</version>
         <configuration>
           <source>1.7</source>
           <target>1.7</target>
           <encoding>utf8</encoding>
             <compilerArguments>
                 <verbose />
                 <bootclasspath>
                     ${java.home}\lib\rt.jar;${java.home}\lib\jce.jar
                 </bootclasspath>
             </compilerArguments>
         </configuration>
       </plugin>
      

 除了“sun”包,其它各个包都是Java平台的标准实现,并且今后也将被继续支持。一般说来,“sun”之类的包并不包含在Java平台的标准中,它与操作系统相关,在不同的操作系统(如Solaris,Windows,Linux,Mac等等)中的实现也各不相同,并且可能随着J2SE版本不定期变化。因此,直接调用“sun”包的程序代码并不是100%的Java实现。
  也就是说:“java.”包,“javax.”包,“org.”包是作为J2SE的API公开接口的一部分,如果程序直接调用这些包中的API,那么程序是可以运行在所有Java平台上,而与操作系统无关;但“sun.”包并不是API公开接口的一部分,调用“sun”包的程序并不能确保工作在所有Java平台上,事实上,这样的程序并不能工作在今后的Java平台上。
  正因为如此,“sun.”包中的类并没有提供API文档。平台无关性是Java语言最大的优势之一,此外,SUN和Java许可证确保维持了今后API的向上兼容性(以后修改的那些有严重bug的代码除外)。这种兼容性意味着你写好的程序编译成的cl ass文件仍然可以工作在将来的版本当中。
  每家实现Java平台的厂商都可以使用他们自己的方式。“sun.
”包中的类是SUN 对Java平台的实现方式,它们工作在Java 2 SDK的下层,这些类未必被其它Java 平台开发商支持。比如你的Java程序如果调用了一个名为“sun.package.Foo”的类,将有可能产生“ClassNotFoundError”的错误,同时你也将失去利用Java的一个主要的优点。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题