我想创建可以显示 .shp(形状文件)并编辑该形状文件的属性表的 java 桌面应用程序。 我在关注 this quick start tutorial在 geotools 网站上学习在应用程序中显示形状文件的部分。 我在教程中成功创建了应用程序,我可以在其中显示一个形状文件。
现在我想在我已经创建的具有其他一些功能的 java swing 应用程序中执行相同的操作。 我有一个 JFrame,我想在其中显示 map (形状文件)。 我将 maven 项目中的代码和所有必需的库复制到 java swing 项目,但它给了我这个错误。
Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: com/vividsolutions/jts/geom/Geometry
我认为maven项目中没有pom.xml文件是不可能运行复制的代码的。
我将其称为“maven 应用程序”或“maven 项目”可能是错误的。我对 maven 的了解很少,但对 Java SE 的了解相当丰富。
我只想像在 maven 应用程序中那样在 java swing 应用程序中显示 map 。
谁能帮我解决这个问题?
谢谢!
最佳答案
Maven 是一个处理项目依赖关系的程序(它有很多东西,但这是与您最相关的功能)。
在你的例子中,Maven 知道你的项目需要 gt-shapefile
Artifact (Maven 对 jar 和类似 jar 的东西的术语),因为你告诉它了。但是 Maven 会查找 pom.xml
file for gt-shapefile
并了解它还需要 gt-data
、gt-referencing
和 jdom
。然后它将查看每个 它们 的 POM 并发现更多依赖项,直到它收集到完整的集合。
一旦 Maven 找出您需要的所有库,它就可以执行构建(这样,它就像 Ant 或您的 IDE,运行 Java 编译器)。一旦代码被编译(或打包,如果您有 Maven 制作 jar),Maven 就完成了,与完成的产品无关。
Swing 是一个标准的图形库。如果您正在编写使用它的类的代码,那么它是一个编译时依赖项,并且当您稍后运行该代码时,Java 将需要找到与 Swing 类的链接。
术语方面:您可以使用 Maven、Ant 或 NetBeans(Ant 上的一个层)或 Eclipse 来描述项目。您可以使用这些项目构建工具中的任何一个来编译使用 Swing 类的代码。事实上,由于代码 Swing 类是标准库的一部分,您根本不需要提及任何 jar 即可与 Swing 一起工作。
好的,现在开始您的实际问题。
您的一个选择是只使用 Maven。通过将其文件复制到 Maven 样式结构中,将现有应用程序转换为 Maven 项目。有一个关于使用 Maven with NetBeans 的页面这可能会有所帮助。基本上,应用程序的 Java 源代码在 src/main/java
下(包名目录从那里开始),非代码的东西(如图像文件)在 src/main/resources
,和单元测试相关的东西放在 src/test/java
和 src/test/resources
中。如果您的应用程序很简单,这应该不会太难,您可能会发现 Maven 使用起来很方便。
如果您的项目很复杂,或者与不使用 Maven 的人共享,或者您只是不想使用它,那么您应该弄清楚您需要哪些依赖项。对于这些说明,我假设您已安装 Maven 并且位于 Unix shell 中。
转到基于 Maven 的 Geotools 项目的根目录(包含其 pom.xml
的目录)。您可以使用命令复制所有依赖项
mvn dependency:copy-dependencies -DoutputDirectory=jars
这将创建一个名为“jars”的子目录,其中包含构建项目所需的每个 jar(包括传递依赖项)。现在只需将这些 jar 链接到您现有的应用程序(或验证它们是否已链接)。
好奇的话可以跑
mvn dependency:tree
Maven 会以文本形式为您打印依赖关系树,因此您可以了解为什么需要每个 jar。
关于swing - 如何在 Java Swing 应用程序中嵌入 Maven 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16998593/