当前位置: 首页 > 知识库问答 >
问题:

分级源compatibility对子项目没有影响

岳玉书
2023-03-14
sourceCompatibility = 1.6

(当然,我还在一些试验中添加了targetcompatibility=1.6,但这不会有什么不同)

为了检查结果是否与1.6实际兼容,我将得到的jar、cd解压缩到web-inf/classes文件夹中,并在遇到的第一个.class文件上使用javap-verbose。但是无论我是否设置了目标兼容性,或者我是否使用1.5而不是1.6或者我是否将其指定为字符串('1.6'),每次javap的结果都是

minor version: 0
major version: 51

这意味着它是Java1.7字节码,这是错误的。

有什么想法为什么sourcecompatibility-设置不起作用吗?还是javap不是检查兼容性的正确方法?

更新:是的,这实际上是一个多项目构建,但我只检查了其中一个子项目的构建结果。在这个子项目的构建文件中,我做了上面提到的更改,以确保它们被实际应用。此外,我在根项目的构建文件中添加了以下内容(正如@vidya所建议的):

allprojects {
    sourceCompatibility = 1.6
    targetCompatibility = 1.6
}

但这也无济于事。

compileJava.doFirst {
    println "source compatibility " + sourceCompatibility
}

更新3:我将构建的脚本改为只使用java插件(因此只构造一些JAR),并删除了warjettyGWT插件的使用。但是,尽管我在allprojects部分和一些子项目中设置了sourceCompatibility 1.7,但是所有项目都设置为sourceCompatibility 1.7。现在在构建脚本中所剩下的就是声明一些体面(maven、文件和其他子项目)、声明要使用的存储库、声明其他一些任务(构建任务不依赖于这些任务,因此它不应该受到影响)以及为创建的jar文件配置清单文件(我在清单文件中添加了一个规范、一个实现版本和标题)。

我看不出这些会对sourceCompatibility设置有什么影响。

共有1个答案

宰父俊彦
2023-03-14

这种行为似乎是由于在apply plugin:'java'之前指定sourcecompatibility引起的,如果您试图在allprojects中设置兼容性选项,就会发生这种情况。

在我的设置中,可以通过替换:

allprojects {
    sourceCompatibility = 1.6
    targetCompatibility = 1.6
}

与:

allprojects {
    apply plugin: 'java'
    sourceCompatibility = 1.6
    targetCompatibility = 1.6
}
 类似资料:
  • 有没有用nuxt3写的开源的项目?像thinkcmf那样的,前后台都有的?

  • 我在Gradle.properties中使用sourceCompatibility=1.7,Gradle JVM(设置,Gradle,Intellij IDEA)是1.8.0_171和 在大楼里。 当我运行构建任务(tasks->build->build Intellij IDEA)时,我在compileJava任务期间得到“错误:不兼容类型:推断的类型不符合等式约束”。 如果我将Gradle J

  • 我最终将两个不同的pom文件(一个用于常规jar文件,一个用于影子jar)发布到同一个URL,其中一个覆盖另一个。这种行为导致客户下载默认的jar,但在pom文件中没有任何依赖项。 我尝试了许多方法来禁用shadowJar pom文件,但没有任何成功。我怎么让它工作?

  • 我知道我能做到 但这也会得到projA和projB,我只想在c,d,E上运行任务...请让我知道实现这一点的最佳方法。

  • 我有一个多项目分级构建,我想应用其中一个子项目作为所有其他子项目的依赖项。 也就是说,如果我指定:

  • 问题内容: 我有带项目的TreeTableView。我希望该用户看到“箭头”展开,即使该项目没有子代也是如此。原因很简单- 延迟加载。当用户单击箭头程序时,将检查是否存在可能的项目(例如,在DB中)。如果存在该项目的子项,则将它们添加到项目。如果不存在,则“箭头”必须消失。怎么做? 问题答案: 的Javadocs显示了一个基本上执行此操作的示例。您可以重写和方法以延迟实例化子级。这是适用于的相同想