我有一个以前使用 JDK 8.0 的项目,现在迁移到 JDK 9。该项目尚未模块化。
关闭对私有 JDK API 的访问的所有问题都已修复,我可以使用 maven、1.8 语言级别和 JDK 9 从命令行构建项目。
Intellij Idea 根本没有突出任何问题,JDK 9 设置为项目 SDK,但是如果我尝试在 Idea 内部构建项目 - 我会在 idea 控制台中遇到编译问题:
Information:javac 9 was used to compile java sources
Error:(5, 16) java: package sun.misc does not exist
Error:(22, 19) java: cannot find symbol
symbol: class Unsafe
location: class <...>.UnsafeAccessor
Run Code Online (Sandbox Code Playgroud)
因此,该项目现在使用 JDK 9 在 CMD 中构建良好,该错误没有太大意义,因为 sun.misc.Unsafe 在 JDK 9 中存在且公开,Idea 本身没有突出显示任何内容,因此它理解一切都存在.
什么可能导致 Idea 内的项目构建问题?
关于IDEA构建的信息:
IntelliJ IDEA 2017.2.5
Build #IU-172.4343.14,建于 2017 年 9 月 …
在寻求解决这个,不知怎么说,我尝试创建包细分main和test类,然后,以与添加的模块使用编译器来执行单元测试.不是很好的方式,但现在只是一个假设的结构.
随着我的进一步发展,几个未解决的问题是: -
junit-jupiter-api-5.0.0.jar]问:请注意,它带来opentest4j-1.0.0.jar了lib /文件夹.为什么会这样,用于其他jar的是什么?
添加类并相应地生成一些测试方法.
使用该命令编译示例项目(仅用于绘制正在使用的目录结构的图片)
javac --module-path lib -d "target" $(find src -name "*.java")
Run Code Online (Sandbox Code Playgroud)
结果警告为 -
Run Code Online (Sandbox Code Playgroud)warning: unknown enum constant Status.STABLE reason: class file for org.apiguardian.api.API$Status not found warning: unknown enum constant Status.STABLE 2 warnings
注意: -
我发现使用junit-jupiter可疑因为如果我使用JUnit注释掉代码并执行相同的命令,事情似乎工作得很好.
如果可能重要的话,使用的库/工具: -
junit-jupiter-api-5.0.0 同 "9" (build 9+181)2017.2.5问:这样的警告可能是什么原因?而且,我无法API.Status在我的项目中和项目类之外找到它.
我当前的系统(MacOS 10.10.5)配置是:
Run Code Online (Sandbox Code Playgroud)IntelliJ IDEA 2017.2.2 #Built on 9August,2017 java version "9" Java(TM) SE Runtime Environment (build 9+181)
每次我开始处理一个项目(目前是1.8.0_65)并使用编写一个类
List<String> example = new ArrayList<>();
Run Code Online (Sandbox Code Playgroud)
=>如果我点击List=>导入类的自动建议提示
引入的默认导入语句是
import com.sun.tools.javac.util.List;
Run Code Online (Sandbox Code Playgroud)
虽然我希望它是:
import java.util.List;
Run Code Online (Sandbox Code Playgroud)
有没有我可以解决的配置,或者这是我正在使用的组合中的一些错误?想知道哪些设置已优先考虑到sun包在java包?
注意:已经通过任何方式(或快捷方式)的答案来自动导入IntelliJ IDEA中的类,就像在Eclipse中一样?但是我输入的选项List不包括java.util我的情况.
编辑:导入为java.util.List不丢失,我可以手动导入相同.
我在Linux Mint 18.2上使用Intellij IDEA 2017.2.5并尝试添加新的openjdk-9 SDK,但IDEA不接受openjdk 9作为有效的JDK:
我已经使用ppa标准存储库中的apt-get安装了所有SDK.
这是我的update-alternatives --config java/javac输出:
虽然声明的IntelliJ会支持JDK 9 在这里,但现在看来,这是尚未与至少opensdk-9完全兼容.
也许重构SDK目录并删除' jre '文件夹会误导IDEA找到SDK 9主文件夹.
知道为什么Intellij IDEA声称' 所选目录不是JDK的有效主页 '吗?
编写表单代码时:
String.format("blah %s %s", value1);
Run Code Online (Sandbox Code Playgroud)
IntelliJ 将警告格式模式的数量和实际参数之间存在不匹配:too few arguments for format string (found:1, expected: 2).
有没有办法将此逻辑应用于自定义方法?例如:
/** @see String#format(String, Object...) */
public String myMethod(String msg, Object... args){
return String.format("blah " + msg, args);
}
...
myMethod("%s %s", value1);
Run Code Online (Sandbox Code Playgroud)
关键是我想让 IDEA 告诉我我搞砸了。
如示例所示,我已经记录了这些委托给String.format().
理想情况下,我宁愿避免复制该文档 - 尽管我愿意将其转换为自定义格式,或者可能是注释(尽管最好不是 IDEA 注释)。
长话短说,几天前我写了这个非常好的SQL查询。然后,我关闭了带有该查询的“数据库控制台”选项卡,无法在任何地方找到它。
文件丢失了吗,还是某个IntelliJ缓存的/系统文件夹?
我问的原因是因为当您打开一个新的数据库控制台时,该选项卡上有一个不同的标记,这使我相信这些文件在某些地方存在持久性?
还有其他方法可以恢复此查询吗?
我正在使用 Maven 编译器插件 3.0,但出现错误“此处不允许使用 Element compilerArgs”。这似乎适用于命令行,但我在 IDE 中收到此错误。我使用 IDEA 2017.2 社区版。某处可能缺少一些架构,但我不确定。有没有人有解决此类问题的好方法,即不向 JetBrains 发送错误报告并等待修复?
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.0</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
<fork>true</fork>
<compilerArgs>
<arg>-DspecificArg</arg>
</compilerArgs>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)