【问题标题】:How to embed maven project in a Java Swing Application如何在 Java Swing 应用程序中嵌入 maven 项目
【发布时间】:2013-06-08 10:32:55
【问题描述】:

我想创建一个可以显示 .shp(形状文件)并编辑该形状文件的属性表的 java 桌面应用程序。 我在 geotools 网站上关注 this quick start tutorial 以了解在应用程序中显示形状文件的部分。 我在教程中成功创建了应用程序,我可以在其中显示一个形状文件。

现在我想在我已经用几个其他函数创建的 java swing 应用程序中做同样的事情。 我有一个 JFrame,我想在其中显示地图(形状文件)。 我将 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 有相当了解。

我只想在 java swing 应用程序中显示地图,就像在 maven 应用程序中一样。

任何人都可以帮助我吗?

谢谢!

【问题讨论】:

  • 你用什么编辑器来写Java?蚀?网豆?维?
  • 目前我正在使用 net beans。我已经使用 net beans 创建了我的 swing 应用程序。

标签: swing maven shapefile geotools


【解决方案1】:

Maven 是一个处理项目依赖关系的程序(它有很多东西,但这是它与您最相关的特性)。

在您的情况下,Maven 知道您的项目需要 gt-shapefile 工件(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/java 和 @ 987654332@。如果您的应用程序很简单,这应该不会太难,而且您会发现 Maven 使用起来很方便。

如果您的项目很复杂,或者与不使用 Maven 的人共享,或者您只是不想要它,那么您应该弄清楚您需要哪些依赖项。对于这些说明,我假设您已经安装了 Maven 并且在 Unix shell 中。

转到基于 Maven 的 Geotools 项目的根目录(包含其 pom.xml 的目录)。您可以使用命令复制所有依赖项

mvn dependency:copy-dependencies -DoutputDirectory=jars

这将创建一个名为“jars”的子目录,其中包含构建项目所需的每个 jar(包括传递依赖项)。现在只需将这些 jar 链接到您现有的应用程序(或验证它们是否已链接)。

如果你好奇,你可以跑

mvn dependency:tree

Maven 会以文本形式为您打印依赖关系树,因此您可以了解为什么需要每个 jar。

【讨论】:

  • 非常感谢您的明确解释和回答。现在行家对我来说有点清楚了。我遵循后一种选择,因为我必须与非 Maven 开发人员共享该项目。我创建了包含所有 jar 文件的 jars 文件夹,并将它们添加到我的普通 Java Swing 应用程序项目的库文件夹中。有效! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-19
  • 2014-08-01
  • 1970-01-01
  • 2011-11-06
  • 2022-08-05
  • 1970-01-01
  • 2013-05-29
相关资源
最近更新 更多