如何强制Java 8的wsimport命令行生成与1.6兼容的目标代码

7
我正在尝试将现有的构建系统升级为使用Java 8而不是Java 5/6编译器,但是我仍然需要生成与Java 5/6兼容的输出。总的来说这很简单(-target 1.6),但是我在使用wsimport生成的代码中遇到了困难(使用JDK 8 bin中的版本)。
我正在使用Java HotSpot 64位服务器VM(build 25.20-b23),JDK 1.8.0_20。
从命令行调用wsimport命令以生成代码,并直接从那里打包输出。由于遗留原因,我无法更改此过程(例如使用ant),因此我需要从命令行解决问题。
我运行的是:“wsimport WSDL_FILE”(实际文件无关紧要) 然后在任何一个输出类上运行“javap -verbose CLASS | grep major”以检查版本:它总是输出52。
我尝试使用-J参数将选项传递给javac编译器,但以下任何一种都没有起作用:
wsimport "-J-target 1.6" WSDL  (fails with unrecognized option -target 1.6" coming from wsimport)
wsimport "-J-Djavac.target=1.6" WSDL  (no effect)
wsimport "-J-Djavac.opt.target=1.6" WSDL (no effect)

我猜想可能有一些关于通过目标的变化可以起作用,或者一些应该起作用的属性设置;如果我正在使用其中一种方式,则我还没找到正确的传递方法。

1个回答

4
假设wsimport创建的源代码是兼容Java 6的,理论上没有问题,但谁知道呢。解决方案是在wsimport命令后添加-Xnocompile,然后使用您熟悉的任何构建机制直接构建源代码即可。请注意保留HTML标记。

不错!我相信那会起作用,我可以合理地加入第二个命令来进行构建。一旦我证明它有效,我就会接受它(在此之前,如果有人知道如何在wsimport内部修复,我很想知道)。 - user1676075

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接