我想创建和java桌面应用程序,它可以显示.shp(形状文件)并编辑该形状文件的属性表。 我在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 application”或“maven project”可能是错误的。我对maven知之甚少,但对Java SE知之甚少。
我只想像在maven应用程序中一样在java swing应用程序中显示地图。
任何人都能帮助我吗?
谢谢!
答案 0 :(得分:2)
Maven是一个处理项目依赖项的程序(它有很多东西,但这是它最相关的功能)。
在你的情况下,Maven知道你的项目需要gt-shapefile
工件(Maven的术语用于罐子和罐子般的东西),因为你这么说。但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
,与单元测试相关的内容进入{ {1}}和src/test/java
。如果您的应用程序很简单,这应该不会太难,您可能会发现Maven方便使用。
如果您的项目很复杂,或者与不使用Maven的人共享,或者您只是不想要它,那么您应该找出所需的依赖项。我假设您已经安装了Maven,并且在Unix shell中。
转到基于Maven的Geotools项目的根目录(包含其src/test/resources
的目录)。您可以使用命令
pom.xml
这将创建一个名为“jars”的子目录,其中包含构建项目所需的每个jar(包括传递依赖项)。现在只需将这些罐子链接到您现有的应用程序(或验证它们已经链接)。
如果你很好奇,可以运行
mvn dependency:copy-dependencies -DoutputDirectory=jars
并且Maven将为您打印文本中的依赖关系树,因此您可以看到为什么需要每个jar。