- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
下面是我的项目目录。我正在尝试使用 Kitchen.jar (位于 libs 文件夹中)作为文件依赖项。
下面是我的 build.gradle 文件,我尝试将 Kitchen.jar 作为依赖项包含在内。
plugins {
// Apply the java plugin to add support for Java
id 'java'
// Apply the application plugin to add support for building a CLI application
id 'application'
}
repositories {
// Use jcenter for resolving dependencies.
// You can declare any Maven/Ivy/file repository here.
jcenter()
}
dependencies {
// This dependency is used by the application.
implementation 'com.google.guava:guava:27.1-jre'
// Use JUnit test framework
testImplementation 'junit:junit:4.12'
compile files('libs/Kitchen.jar')
}
application {
// Define the main class for the application
mainClassName = 'Kitchen.App'
}
但是,当我运行 gradle build
时我收到编译器错误,它告诉我 Kitchen.jar 文件尚未正确导入。 “Food”是Kitchen.jar中的一个类。
这就是 Oven 类在 insertFood
的一些上下文中的样子。方法看起来像。
package Kitchen;
/**
* This class models an oven appliance for cooking food.
*/
public class Oven {
private final int maxTemperature;
private int currentTemperature = 0;
/**
* Creates an Oven object with a default maximum temperature of 320 degrees Celsius
*/
public Oven() {
this(320);
}
/**
* Creates an Oven object with a specific maximum temperature
*
* @param maxTemperature The maximum temperature this oven can be set to. Cannot be a negative number.
* @throws IllegalArgumentException If the maxTemperature is negative
*/
public Oven(int maxTemperature) {
if (maxTemperature < 0) {
throw new IllegalArgumentException("Invalid temperature");
}
this.maxTemperature = maxTemperature;
}
/**
* Sets the current temperature of the oven to the given value
*
* @param temperature The temperature to set in degrees Celsius
* @throws IllegalArgumentException If the temperature is negative or higher than this oven's maximum temperature.
*/
public void setTemperature(int temperature) {
if (temperature < 0 || temperature > maxTemperature) {
throw new IllegalArgumentException("Invalid temperature");
}
this.currentTemperature = temperature;
}
/**
* Gets the current temperature (the oven has no heating or cooling times and changes temperatures instantly)
* @return The current temperature in degrees Fahrenheit
*/
public int getCurrentTemperature() {
return (currentTemperature * 9/5) + 32;
}
/**
* Gets the maximum temperature this oven can be set to
* @return The max temperature in degrees Celsius
*/
public int getMaxTemperature() {
return maxTemperature;
}
/**
* Adds an item of food to the oven, potentially changing its state.
*
* @param food The food to be added to the oven
* @param duration The length of time in minutes the food will be in the oven for
* @throws IllegalArgumentException If the food parameter is null, or if the duration is negative
*/
public void insertFood(Food food, int duration) {
if (null == food) {
throw new IllegalArgumentException("Food may not be null");
}
if (duration < 0) {
throw new IllegalArgumentException("Duration must be >= 0");
}
food.cook(currentTemperature, duration);
}
}
同样,IDEA 显示类似的错误,如下所示。
我尝试通过“项目结构”窗口(见下文)手动添加 Kitchen.jar 文件作为依赖项,即使根据屏幕截图将其添加为依赖项,上述错误仍然存在。
我还尝试过"file"->“使缓存无效/重新启动”;但是,这并不能解决我的问题。
为什么我的 Kitchen.jar 文件中的任何类(例如“Food”)都没有在我的 Gradle 项目中注册?
编辑 1:
我已经尝试了 0xadecimal 的解决方案,如下所示,但不幸的是它仍然无法编译,并且 Intellij 抛出了关于未解析 Oven 类中的符号“Food”的相同错误,如下所示。
编辑2:
我尝试了 Lukas Körfer 在评论中的建议,使用 implementation files(...)
;但是,我仍然收到编译错误,并且 Intellij 仍然对我大喊大叫(屏幕截图的右侧)。请注意,每次更改 build.gradle 文件时,我都会通过点击 dependencies
旁边的绿色按钮来确保运行依赖项。即使我已将 Intellij 设置为在 build.gradle
时自动更新文件更改。这意味着问题不应该是因为 Intellij 中的依赖项没有更新。
最佳答案
我认为问题在于您试图从命名包( Kitchen.jar
)中的类导入未命名包( Kitchen.App
中的任何类)中的类。
Java 不允许将类从默认(未命名)包导入到命名包中 - 这就是导致您看到的编译时错误的原因:
来自Java Language Specification 7.5.1
The type must be either a member of a named package, or a member of a type whose outermost lexically enclosing type declaration (§8.1.3) is a member of a named package, or a compile-time error occurs.
要解决此问题,您可以:
确保Kitchen.jar 中提供的代码属于指定包。如果 JAR 仅包含已编译的类文件,并且您无权访问源代码,那么这不是一个选项。如果您确实有权访问源代码并且可以重建此 JAR,那么您需要放置一个包结构,以便类不会全部位于 JAR 的根目录中,例如:
home/util/AbstractFood.java
home/util/Food.java
home/util/Fries.java
home/util/Kitchen.java
home/util/Oven.java
home/util/Potato.java
与package home.util;
在每个文件的顶部。
然后您应该重建 jar 并导入 App.java
中的类和Oven.java
使用import home.util.Kitchen;
, import home.util.Oven;
等
Kitchen
) 中的代码移至默认(未命名)包中。这不是一个好主意 - 我们不应该在默认包中编写代码,但如果您无法执行选项 1,这是您唯一的选择。这意味着将您的 java 代码 ( App.java, Oven.java
) 直接驻留在 src/main/java
中目录,并删除任何 package Kitchen
这些文件顶部的声明。您还需要设置mainClassName = 'App'
关于java - 无法使用 Gradle 和 Intellij 导入 jar 文件依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58280194/
我一直在尝试运行 junit 测试,但不断面临这个问题。我试图在互联网上寻找答案,但没有任何帮助。 ] 1 最佳答案 我遇到了同样的问题,但已通过更新 Intellij 最新版本 2020.3 解决。
我知道这个问题以前曾以各种形式提出过,但我已经检查了所有答案,我认为我们已经排除了所有答案。 错误: java.lang.NoClassDefFoundError: com/lgc/infra/geo
TL; 博士 我如何导入 com.intellij.psi.JavaPsiFacade我的 IntelliJ 插件中的类? 背景资料 我正在尝试开发一个 IntelliJ 插件。我一直在遵循入门指南
我目前正在为 IntelliJ 开发一个插件,并尝试使用另一个内置的 IntelliJ 插件作为依赖项 (git4idea)。如 IntelliJ 插件开发文档中所述,我将所需的 JAR 添加到项目结
我尝试在 MacOS 上安装与 IntelliJ 10 集成的 JProfiler。安装程序试图找到我没有的“IntelliJ 配置文件夹”,我也不知道如何创建。 任何帮助或提示都会很棒。 最佳答案
我记得有一个选项可以在失去对idea windows 的关注时自动构建当前项目(例如,您从intellij 切换到浏览器以测试您的webapp),但是我找不到(idea 12.1.6)。 你知道我在哪
我有两个 Java 项目作为 Bukkit/Spigot 插件。两个项目都使用 gradle、私有(private)存储库,一个项目应该从另一个项目继承。 项目: SpigotCore - 包含数据库
标题说明了一切……只是想让 Glassfish 继续前进。这是我得到的错误 Detected server admin port: 4848 [2015-04-06 07:37:56,138] Art
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 7 年前。 Improve t
每次我重新启动系统或安装新插件时,我的 intellij 键盘映射都会重置。如果重要的话,我正在开发容量非常有限的 win XP - 只有 1 个 25 GB 容量的驱动器。但是,仍有 7 GB 的可
这是一段简单代码的输出: /Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home/bin/java "- javaagent:/Applic
Intellij Idea的状态栏中是否显示选中的行数? (如果选择包括单词,则显示“字符数”选择计数) 最佳答案 评论中提到的功能现已可用。 右击状态栏,选择“行列数”,见图: 然后您在状态栏中看到
我想将大量代码重构到新类中。我需要一个工具来让我将部分旧代码标记为“已完成”,这样我就可以看到还剩下什么要做。 我把它想象成背景或边缘的一些颜色。如果我可以使用不同的颜色或向代码块添加注释,那将是最好
如何查找和排序 TODO项目按字母顺序排列,就像在 Eclipse 中一样? 我不能使用文件搜索功能,因为我只需要查找注释而不是字符串和文字。对于当前混合的源文件/模板/脚本,TODO 至少已经以下列
我正在使用 IntelliJ Idea 开发一个 Spring 项目。我想知道是否有办法从 IntelliJ 日志或其他一些黑暗的方式知道我在这个项目上花了多少时间? 我是在看到 Idea 的 Pro
当您有 todo:在您的评论中,intellij 可以检测到它并将其显示在待办事项列表中。我怎样才能让一些自定义标记被识别?例如,config: . 最佳答案 在“设置”中查看“编辑器”/“待办事项”
我已启用所有 soft wrap可以在 Intellij (2017.3) 中找到的设置: Appearance|General同意该 list : 我点击了“应用”——这通常实际上可以立即查看效果—
我需要调查微服务中的内存泄漏。我看到一些 Profile... Intellij 中的菜单项 单击它后,应用程序将运行。你能告诉我在哪里可以看到分析的结果吗? 最佳答案 此操作用于分析 Android
我将 IntellIJ 安装更新到最新版本 (11.1.4),现在没有出现编辑器窗口。双击文件,跳转到源代码,没有任何 react 。没有错误消息,只是没有出现。如果我双击一个 xml 布局文件,预览
有没有办法在项目中自动构建工件,就像它如何自动构建输出一样?如果存在快捷键也可以使用 -- 现在我需要单击 Build -> Build Artifacts -> Build这很麻烦。 编辑:在这种情
我是一名优秀的程序员,十分优秀!