当我实现接口的方法时,Eclipse正在添加@Override注释.Eclipse似乎对此没有任何问题.我们Cruise Control的自动构建过程似乎对此没有任何问题.但是当我从命令行构建时,使用运行javac的ant,我收到此错误:
[javac] C:\path\project\src\com\us\MyClass.java:70: method does not override a method from its superclass
[javac] @Override
[javac] ^
[javac] 1 error
Run Code Online (Sandbox Code Playgroud)
Eclipse在Java 1.6下运行.Cruise Control正在运行Java 1.5.无论我使用哪个版本的Java,我的ant构建都会失败.
伙计们,
我正在尝试使用Ant和终端上的Javac Cross编译.在本地和集成环境中,我在最基本的问题上遇到了同样的问题.
我在linux终端中运行它(以及在windows和cmd上的cygwin上):
javac -target 1.6 -source 1.7 -bootclasspath /usr/java/jdk1.6.0_27/jre/lib/rt.jar Main.java
Run Code Online (Sandbox Code Playgroud)
与Main.java只有System.out.println.
javac -version ==> javac 1.7.0_11
Run Code Online (Sandbox Code Playgroud)
我收到错误消息:
javac: source release 1.7 requires target release 1.7
Run Code Online (Sandbox Code Playgroud)
我在本地Windows机器上具有大致相同的配置,结果完全相同.
我的理解是,交叉编译的全部内容是编译一些与更高版本的jdk兼容的源代码,使用更高版本的jdk,但是传递的目标版本的rt.jar应该更低.
如果目标和来源相同,那就有效了.
target=1.7 and source=1.7 workd fine
target=1.6 and source=1.6 worked just fine
Run Code Online (Sandbox Code Playgroud)
但我想要交叉编译,那么我做错了什么呢?
我很感激能得到的所有帮助,并提前感谢.
我有一个Java applet,它提供了一个GUI来调用Web服务.它使用Jaxb来解析XML数据并将其解组为对象.它使用Java 1.5到1.8正确运行.使用Java 9,不是那么多.
我使用容器HTML在Internet Explorer 8 + JDK 9中启动它:
<applet code="com.blah.MyApplet" archive="myFatJarWithDependencies.jar" mayscript>
<param name="cache_option" value="no" />
</applet>
Run Code Online (Sandbox Code Playgroud)
小程序加载很好,似乎工作; 但是,一旦我连接到Web服务,它那种停止工作.我把它缩小到这个代码片段(其中Foo是一个带有XML绑定注释的自动生成的类):
System.out.println("1");
JAXBContext jc = JAXBContext.newInstance(Foo.class);
System.out.println("2");
Run Code Online (Sandbox Code Playgroud)
Java的控制台显示1,然后......没有:它没有崩溃,applet仍然响应鼠标点击,它不会抛出任何异常......似乎根本没有错误.除了它没有对接收的数据做任何事情,它从不输出2.我已经尝试了替代JAXBContext.newInstance方法(使用包名,包名加上类加载器),但它们都是一样的.
如果我使用相同的JDK 9从Eclipse Oxygen运行项目,它确实有效.当我连接到Web服务时,它会输出一些警告,包括:
WARNING: Illegal reflective access by com.sun.xml.bind.v2.runtime.reflect.opt.Injector
(file:/C:/.../.m2/repository/com/sun/xml/bind/jaxb-impl/2.0/jaxb-impl-2.0.jar) to method
java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int)
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access
operations
Run Code Online (Sandbox Code Playgroud)
但随后它继续并加载数据(并输出2到控制台).我的猜测是同样的问题,即使Java控制台中没有显示警告.也许JDK默认--illegal-access=deny是从IE运行的时候?或者"默默地否认 - 所以 - 用户 - 不要发生什么线索" …
注:请不要不上交叉编译的所有危险评.谢谢.
我有一种情况,我们需要为Java 5 JVM编译Java 6源代码(以确保JAX-WS的使用是正确的).以前我们用ant ant脚本(显然可以)这样做了,但是在迁移到Maven之后我们发现它最终以javac抱怨:
$ javac -source 1.6 -target 1.5
javac: source release 1.6 requires target release 1.6
Run Code Online (Sandbox Code Playgroud)
是否有任何对Linux(Ubuntu的11.10,86),其中使用javac可以做到这一点的Java分配?
编辑:它似乎没有,因为限制在javac是相同的.解决方案(这使得需要消失)是从默认的javac编译器改为maven-compiler-plugin中的eclipse编译器.
编辑:我发现Eclipse编译器为javadoc实用程序不同意的匿名内部类生成字节代码.我正在为此问题准备一份错误报告.