相关疑难解决方法(0)

为什么javac在@Override注释上失败

当我实现接口的方法时,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构建都会失败.

java annotations

53
推荐指数
2
解决办法
4万
查看次数

Javac Cross-Compilation with 1.7

伙计们,

我正在尝试使用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 javac cross-compiling

17
推荐指数
1
解决办法
2万
查看次数

使用Jaxb和JDK 9在applet中进行非法反射访问

我有一个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 applet jaxb java-9 java-module

7
推荐指数
1
解决办法
3121
查看次数

哪个JDK的发行版可以运行`javac -source 1.6 -target 1.5`?

注:请不要上交叉编译的所有危险评.谢谢.


我有一种情况,我们需要为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实用程序不同意的匿名内部类生成字节代码.我正在为此问题准备一份错误报告.

java linux ubuntu javac

3
推荐指数
1
解决办法
5550
查看次数