gpt4 book ai didi

java - 在java项目中使用cmake时出现"package xxx.util does not exist"错误

转载 作者:行者123 更新时间:2023-12-02 11:27:59 25 4
gpt4 key购买 nike

我必须为一门类(class)编写一个java项目,我们的教授要求我们使用CMake作为构建工具。在我的入口点(主类)中,我想使用位于另一个包中的类。在尝试编译它时,我收到以下错误消息(附在下面)。

在 Foo.java 中使用此通配符导入

import xxx.util.*;

有帮助,但我确信这不是实现我的目标的最优雅的方法。

我无法弄清楚如何解决这个问题,因为使用另一个内置工具(maven)或手动编译它都没有问题。但由于我必须使用 CMake,我希望任何人在使用这种项目设置时遇到类似的问题,并且能够帮助我。

我在下面列出了所有相关的项目信息(结构、受影响的类、CMakeLists.txt...)。

请随时在评论部分提出问题,以消除任何歧义。

谢谢!

相关项目结构:

.
|-- CMakeLists.txt
|-- build
|-- resources
| |-- MANIFEST.MF
| \-- sqlite.jar
|-- src
| \-- xxx
| |-- gui
| | \-- Foo.java
| \-- util
| |-- Bar.java

Foo.java:

package xxx.gui;

import xxx.util.Bar;

public class Foo {

public static void main(String[] args) {
Bar bar = Bar.getBar(); //singleton

}
}

Bar.java:

package xxx.util;

public class Bar {

}

CMakeLists.txt:

cmake_minimum_required(VERSION 3.5) 
project(xxx LANGUAGES Java)
find_package(Java 1.8 REQUIRED COMPONENTS Development)
include(UseJava)
file(GLOB_RECURSE SOURCES "src/*.java")
file(GLOB_RECURSE JARS "resources/sqlite*.jar")
add_jar(DataFX ${SOURCES} MANIFEST ./resources/MANIFEST.MF INCLUDE_JARS ${JARS}
ENTRY_POINT xxx.gui.Foo)

list .MF:

Class-Path: ../resources/sqlite.jar

相关错误消息:

gui/Foo.java error: package xxx.util does not exist
import xxx.util.Bar;
^
gui/Foo.java error: cannot find symbol
Bar bar = Bar
^
symbol: class Bar
location: class Foo
...

最佳答案

出现此错误似乎很合乎逻辑。 CMake 与其他 make 实用程序一样,在很大程度上取决于类的编译顺序。

从您附加的 makefile 中可以明显看出,make 的入口点是“xxx.gui.Foo”包,问题在于 Foo.java 依赖于 Bar.java,而此时尚未编译。

如果你切换顺序,你可以让它正常工作,没有任何问题,即 Bar.java 在 Foo.java 之前构建。

总而言之,如果您需要使用 make 文件来保留所有实用程序类,并且通常所有类对 make 文件顶部的其他包/类的依赖性尽可能小,以便最大限度地减少依赖,那么这是一个好主意此类问题。

现在,回答一下为什么使用 Maven 或 javac 不会遇到这个问题,如果是前者,它是一个构建工具,因此它自己无法解决所有这些问题。对于后者,我想您已经编译了这两个类,因此它可以工作。

希望以上内容能解决您的问题。

关于java - 在java项目中使用cmake时出现"package xxx.util does not exist"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49480866/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com