swing - 如何在 Java Swing 应用程序中嵌入 Maven 项目

标签 swing maven shapefile geotools

我想创建可以显示 .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-datagt-referencingjdom。然后它将查看每个 它们 的 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/javasrc/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/

相关文章:

python - 根据带有 basemap 的字典值对一个国家/地区的状态进行着色

python - PyShp - 让 Python 识别折线中的点

java - 如何在 Java 中的两个 GUI 之间使用相同的数据?

maven - 无法使 buildnumber-maven-plugin 插件工作

java - 覆盖操作已执行

java - log4j 与 maven tomcat7 :run but not with tomcat7:deploy 一起工作

eclipse - 非多项目环境的 Gradle 依赖项

r - 使用 ggplot 绘制带孔的多边形(在城市 map 中)

java - 图像不会在屏幕上绘制,但不会发生错误

java - 将属性文件放入 JTree 而不仅仅是显示它