【发布时间】:2013-08-17 21:50:20
【问题描述】:
所以,我创建了一个 Spring Maven 项目,一个 Dao 项目,效果很好。所有代码都在正确的位置,所有单元测试都运行,我可以进行 mvn clean install。我可以在目标目录中看到有一个构建 jar,其中的所有内容看起来都很好。我还可以确认,当我检查我的本地 .m2/repository 时,我刚刚构建的最新 jar 就在那里。
这是 pom.xml 的一小部分:
<modelVersion>4.0.0</modelVersion>
<groupId>com.tom.myproject</groupId>
<artifactId>myproject-dao</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>My Project DAO</name>
现在,我正在为我的 UI 创建一个新的 Spring Maven Web 项目,这个 pom.xml 的开头如下:
<modelVersion>4.0.0</modelVersion>
<version>0.0.1-SNAPSHOT</version>
<groupId>com.tom.myproject</groupId>
<artifactId>myproject-ws</artifactId>
<name>My Web Project</name>
<packaging>war</packaging>
同样在这个 pom.xml 文件中,我拥有的第一个依赖项是:
<!-- My DAO ProjectDependencies -->
<dependency>
<groupId>com.tom.myproject</groupId>
<artifactId>myproject-dao</artifactId>
<version>0.0.1-SNAPSHOT</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
我可以在 Eclipse 中看到,当我尝试从这个 dao jar 访问类时,这似乎工作正常。当我在这里编译代码时,一切正常。当我执行“mvn clean install”来构建这个war时,我可以看到目标目录,所有需要的类和jar都进来了,显然WEB-INF中有hibernate、logging和spring类/lib 目录。
现在这是问题所在...为什么 myproject-dao 在 WEB-INF/lib 下显示为 WEB-INF/lib/myproject-dao-0.0.1-SNAPSHOT.jar 但出现作为目录,而不是 jar?
当然,当我拉入其他 jar 时,它们只是 .jar 文件而不是目录。
我应该补充一点,当您在 Maven 依赖项下查看 Eclipse 项目时,所有其他 jar 的图标都将它们显示为文件。 myproject-dao.jar 的图标使用文件夹/目录的图标,因此很明显正在创建一个名为“myproject-dao.jar”的目录,而不是一个将内容压缩到 jar 文件中的文件。
当我构建 war 文件并部署 war 时,应用程序说它在 myproject-dao.jar 目录中找不到任何类。我必须从 WEB-INF/lib 目录中删除文件夹“myproject-dao.jar”并手动复制文件“myproject-dao.jar”。然后我可以清楚地看到表示这确实是一个文件的图标。
这可能是一个简单的修复,所以如果你能帮助我,那就太好了。
回答:
我没有使用 maven-assembly-plugin。但是,我确实发现了问题所在。
我的DAO项目和WEB项目都在同一个工作区,并且DAO项目是打开的,结果Eclipse中显示的maven依赖是一个文件夹图标,而不是jar图标。当我关闭 DAO 项目并回头查看 WEB 项目 pom.xml 文件的 maven 依赖项时...现在它显示图标为 jar 而不是文件夹。
所以,我所要做的就是用 maven 构建我的 dao.jar 文件,当它成功时,它就完成了。 然后我必须在 Eclipse 中关闭项目。 在我的 web 项目 pom.xml 文件中,该图标现在将显示为 jar 文件,并且在构建时,它将拉入 jars。
我想如果一个人正在处理多个先前的项目,这是一个好处,你确实有机会在战争运行时查看 jar 文件中的内容。
就我而言,我知道我的 dao.jar 正在工作,所以我可以构建它,关闭项目,然后在我需要的任何地方使用该 jar。
【问题讨论】:
-
我有点困惑,你是什么意思:“显示为目录,而不是 jar。”如果从war中解压WEB-INF/lib/myproject-dao-0.0.1-SNAPSHOT.jar,是目录还是jar文件?
-
默认情况下,依赖项(例如 JAR)在 WAR 中被打包到
WEB-INF/lib,您期望什么或困扰您什么? -
谁能解释一下是什么问题??
-
是的...我知道 WAR 本质上是一个压缩目录。如果您像我一样使用 Windows 系统并且查看 WEB-INF/lib,那么 spring-framework-core-3.2.3-RELEASE 有一个图标,显示它是一个 .jar 文件。当我查看 jar 的图标时,它是文件夹/目录的图标。这么说吧...如果您在 Windows 上创建了一个名为 test.jar 的目录... windows 知道它实际上是一个目录,而不是一个文件。这在 Eclipse 中的 Maven 依赖项下甚至很明显,我的 jar 图标看起来像一个目录而不是文件的图标。
-
其实你不需要工具一个jar文件基本上就是一个存档。见这里en.wikipedia.org/wiki/JAR_%28file_format%29。你在使用 maven-assembly 插件吗? (maven.apache.org/plugins/maven-assembly-plugin) 还是战争插件? (maven.apache.org/plugins/maven-war-plugin) 你也可以提供你的整个 pom.xml。我愿意提供帮助,但我需要更多信息
标签: maven jar maven-jar-plugin