相关疑难解决方法(0)

Gradle,"sourceCompatibility"与"targetCompatibility"?

sourceCompatibility和之间有什么关系/区别targetCompatibility?当它们被设置为不同的值时会发生什么?

根据Gradle文档:

sourceCompatibility是"编译Java源时使用的Java版本兼容性". targetCompatibility是"为Java生成类的Java版本."

我的理解是,targetCompatibility将生成与特定版本的Java兼容的java字节码,这是一个功能的子集sourceCompatibility吗?

java gradle

116
推荐指数
3
解决办法
7万
查看次数

maven更新后,Java版本自动更改为java 1.5

我使用eclipse作为IDE.当我右键单击项目然后单击maven更新我的java版本更改为1.5.这是我到目前为止所做的,我按照这里列出的所有步骤

http://qussay.com/2013/09/13/solving-dynamic-web-module-3-0-requires-java-1-6-or-newer-in-maven-projects/

  1. 我将"Java构建路径"更改为"工作区默认jre 1.8.0_25"
  2. 然后将"java compiler"更改为1.8
  3. 然后改变了"project facets"> java> 1.8
  4. 将pom.xml java版本更改为1.8
    <build>
        <plugins>
            <plugin>
                <groupId>org.eclipse.jetty</groupId>
                <artifactId>jetty-maven-plugin</artifactId>
                <version>9.1.3.v20140225</version>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugin</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
Run Code Online (Sandbox Code Playgroud)

毕竟当我点击"Maven update"时,我的java版本会自动更改为1.5.同样在上述步骤中,前两步的版本也会自动更改为1.5.我怎样才能解决这个问题?

java eclipse maven

106
推荐指数
4
解决办法
7万
查看次数

使用不同的Java版本编译Maven模块

我的maven项目有几个模块:服务器,网络等.

我想在Java 6上构建除了我的服务器模块之外的所有模块.对于服务器模块,我想用Java 7编译它.

这是我下面的pom.xml,但我想如果我将它修改为1.7,那么我的所有模块都将用Java 7编译.另外,maven是否使用JAVA_HOME环境变量来确定要使用哪个Java版本?

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
                        <version>2.3.2</version>
        <configuration>
            <source>1.6</source>
            <target>1.6</target>
            <memmax>2048m</memmax>
        </configuration>
    </plugin>
Run Code Online (Sandbox Code Playgroud)

编辑另外,下面的输出是

maven --version

表明maven正在用1.7编译我的java代码?

vagrant@dev:~/bin/apache-tomcat-7.0.29/bin$ mvn --version
Apache Maven 3.0.4 (r1232337; 2012-01-17 08:44:56+0000)
Maven home: /home/vagrant/bin/apache-maven-3.0.4
Java version: 1.7.0_07, vendor: Oracle Corporation
Java home: /home/vagrant/bin/jdk1.7.0_07/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.2.0-23-generic", arch: "amd64", family: "unix"
Run Code Online (Sandbox Code Playgroud)

谢谢,凯文

maven

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

--release不允许从系统模块导出包

我有以下程序:

module-info.java

module a {
}
Run Code Online (Sandbox Code Playgroud)

Main.java

public class Main {
    public static void main(String[] args) {
        System.out.println(sun.nio.ByteBuffered.class);
    }
}
Run Code Online (Sandbox Code Playgroud)

该程序成功编译--add-exports选项:

> javac --add-exports java.base/sun.nio=a module-info.java Main.java
Run Code Online (Sandbox Code Playgroud)

但是,当我添加--release参数时,它会失败:

> javac --add-exports java.base/sun.nio=a --release 9 module-info.java Main.java
error: exporting a package from system module java.base is not allowed with --release
1 error
Run Code Online (Sandbox Code Playgroud)

基本上,这两个命令是等效的.那么为什么后者被禁止呢?

此外,由于IDEA将--release参数传递给javac,如果我的项目需要内部API,这使得IDEA的开发变得不可能.

我正在使用JDK 9 + 178.

java javac java-platform-module-system java-9

10
推荐指数
4
解决办法
2803
查看次数

IntelliJ 2018.1首选项中的"使用' - release'选项"是什么?

在IntelliJ 2018.1(构建,执行,部署>编译器> Java编译器)的首选项中,有一个标记为的复选框:

使用'--release'选项进行交叉编译(Java 9及更高版本)

我在网上搜索时找到了相关信息."?" 单击帮助图标时出现404错误.

这个选项的目的/功能是什么?

在此输入图像描述

java compilation javac intellij-idea java-9

8
推荐指数
1
解决办法
797
查看次数

转到OpenJDK-11但在Java 8中编译

我有一个现有的Spring boot应用程序,我建立gradle.这些天我一直在使用JDK / JRE 8,现在我正在尝试使用JDK-11

因此,要检查兼容性,我设置JAVA_HOMEJDK-11,但试图编译Java 8模式

我在下面添加了以下块 build.gradle

compileJava {
    targetCompatibility = '1.8'
}
Run Code Online (Sandbox Code Playgroud)

然后我JAVA_HOME明确地设置set JAVA_HOME=C:\Users\arun\Desktop\jdk-11.0.1

然后执行 gradlew clean build

但是我因以下例外而停止了

> Configure project :
Build Version = build-182-ga03cf6c

> Task :compileJava FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':compileJava'.
> warning: source release 11 requires target release 11
Run Code Online (Sandbox Code Playgroud)

如何指向我JAVA_HOMEJDK-11,但仍然在执行它Java-8 …

java gradle java-8 java-11

7
推荐指数
2
解决办法
2868
查看次数

JavaFX 应用程序中“maven-compiler-plugin”的“&lt;configuration&gt;”上的“&lt;release&gt;”元素是什么

我使用org.openjfx:javafx-archetype-simpleMaven 原型启动了我的第一个 JavaFX 项目。

\n\n

生成的 POM:

\n\n
<project xmlns = "http://maven.apache.org/POM/4.0.0"\n         xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"\n         xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">\n    <modelVersion>4.0.0</modelVersion>\n    <groupId>com.example.invoicing</groupId>\n    <artifactId>Invoicer</artifactId>\n    <version>1.0-SNAPSHOT</version>\n    <properties>\n        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>\n        <maven.compiler.source>14</maven.compiler.source>\n        <maven.compiler.target>14</maven.compiler.target>\n    </properties>\n    <dependencies>\n        <dependency>\n            <groupId>org.openjfx</groupId>\n            <artifactId>javafx-controls</artifactId>\n            <version>14</version>\n        </dependency>\n    </dependencies>\n    <build>\n        <plugins>\n            <plugin>\n                <groupId>org.apache.maven.plugins</groupId>\n                <artifactId>maven-compiler-plugin</artifactId>\n                <version>3.8.1</version>\n                <configuration>\n                    <release>14</release>   ???\n                </configuration>\n            </plugin>\n            <plugin>\n                <groupId>org.openjfx</groupId>\n                <artifactId>javafx-maven-plugin</artifactId>\n                <version>0.0.4</version>\n                <configuration>\n                    <mainClass>com.example.invoicing.App</mainClass>\n                </configuration>\n            </plugin>\n        </plugins>\n    </build>\n</project>\n
Run Code Online (Sandbox Code Playgroud)\n\n

\xe2\x9e\xa5插件的<release>14</release>行的目的是什么?<configuration><artifactId>maven-compiler-plugin</artifactId>

\n\n

我找到了 Maven 编译器插件的文档Compiling Your Java Sources。但它只提到<!-- put your configurations here -->。所以我对这里的具体配置选项一无所知。 …

java javafx maven maven-compiler-plugin openjfx

7
推荐指数
2
解决办法
4710
查看次数

libGDX设置允许我使用在Android中崩溃的Java 8

我是java/android的新手,所以我希望这是一个很容易解决的问题.

我已经使用libGDX的设置创建了一个项目,然后我将其导入Android Studio.我不知道Supplier接口只适用于Java 8,并在核心模块中使用它,据我所知,它编译成一个由所有android/html/desktop/ios版本的游戏共享的库.桌面版本运行正常(我安装了Java 8),但我的Android应用程序崩溃了一个NoClassDefFoundError错误(BTW,错误消息显示我写的类的名称,而不是Supplier,但错误消失了,一旦我删除每一个Supplier当我添加它们时引用并返回,所以显然错误消息不显示实际的问题类).

如果我尝试Supplier在我的android模块中使用它,它甚至不会让我导入该类,因此它知道它不支持该Java版本,但它很高兴让我在核心模块中使用它而没有任何警告.我确定删除引用Supplier将解决问题,但如果我无意中使用任何Java 8功能,此修复可能会导致运行时错误,因此不是解决问题的好方法.

我不知道项目在哪里设置使用Java 8,似乎有一堆.gradle,.xml和.iml文件显然都与配置有关.这是我build.gradle在核心模块中的文件:

apply plugin: "java"

sourceCompatibility = 1.6
[compileJava, compileTestJava]*.options*.encoding = 'UTF-8'

sourceSets.main.java.srcDirs = [ "src/" ]


eclipse.project {
    name = appName + "-core"
}
Run Code Online (Sandbox Code Playgroud)

sourceCompatibility = 1.6当我将鼠标悬停在它上面时,Android工作室显示该行显示为灰色并显示"未使用分配".所以这可能是问题的一部分.

我的core.iml文件也包含这一行:

<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_6" inherit-compiler-output="false">
Run Code Online (Sandbox Code Playgroud)

另外,这是corebuild.gradle文件中的部分:

project(":core") {
    apply plugin: "java"


    dependencies {
        compile "com.badlogicgames.gdx:gdx:$gdxVersion"
    }
}
Run Code Online (Sandbox Code Playgroud)

那么,我应该改变什么来阻止它让我在我的核心项目中使用Java 8?

java android gradle libgdx android-studio

6
推荐指数
1
解决办法
1452
查看次数

java 编译:源、目标和发布支持的版本

我可能会为遗留项目做一些交叉编译,我注意到最近的 JDK 仅限于某些特定版本的source,targetreleaseJVM 参数。
如何获得这些参数的支持版本?

java compilation javac

5
推荐指数
1
解决办法
2065
查看次数

Java 11:javac --release 和 -source 和 -target 命令行参数有什么区别?

有谁知道使用 --release 和旧的 -source 和 -target 命令行参数之间的区别吗?

在 javac 手册页中: -source 提供与指定版本的源兼容性 -target 为特定 VM 版本生成类文件

--release 为特定的 VM 版本编译。支持的目标:6、7、8、9、10、11

--release 可以将 -source 和 -target 绑定到同一版本吗?

java javac java-11

3
推荐指数
2
解决办法
3110
查看次数

javac 11可以编译将在java 8 JVM上运行的二进制文件/ jar吗?

javac 11可以编译将在java 8 JVM上运行的二进制文件/ jar吗?

如果是这样,用什么标志?

将gradle源兼容性设置为11并将目标兼容性设置为8可以吗?

java

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