Java Maven Project作为目录而不是jar出现在另一个项目中

时间:2013-08-15 16:31:30

标签: maven jar maven-jar-plugin

所以,我创建了一个Spring Maven项目,一个Dao项目,效果很好。所有代码都在正确的位置,所有单元测试都运行,我可以进行mvn clean安装。我可以在目标目录中看到有一个构建jar,其中的所有内容看起来都很好。我还可以确认,当我检查我的本地.m2 /存储库时,我刚刚构建的最新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-Project,这个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”来构建这个战争时,我可以看到目标目录,所有需要的类和jar都进来了,显然在WEB-INF中有hibernate,logging和spring类。 / lib目录。

现在这是问题所在的部分...为什么myproject-dao在WEB-INF / lib下显示为WEB-INF / lib / myproject-dao-0.0.1-SNAPSHOT.jar但是出现了作为目录,而不是jar?

当然,当我拉入其他罐子时,它们只是.jar文件,而不是目录。

我应该补充一点,当您在maven依赖项下查看Eclipse项目时,所有其他jar的图标将它们显示为文件。 myproject-dao.jar的图标使用文件夹/目录的图标,因此显然正在创建名为“myproject-dao.jar”的目录,而不是将内容压缩到jar文件中的文件。

当我构建war文件并部署war时,应用程序说它找不到myproject-dao.jar目录中的任何类。我必须从WEB-INF / lib目录中删除FOLDER“myproject-dao.jar”并手动复制FILE“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文件,当它构建时,它将拉入jar。

我想如果一个人正在处理几个先前的项目,这是一个好处,你真的有机会在战争运行时查看jar文件中的内容。

在我的情况下,我知道我的dao.jar正在工作,所以我可以构建它,关闭项目,然后在我需要的地方使用那个jar。

1 个答案:

答案 0 :(得分:6)

我没有使用maven-assembly-plugin。但是,我确实发现了问题所在。

我的DAO项目和WEB项目都在同一个工作区,并且DAO项目是打开的,因此,Eclipse中显示的maven依赖项是一个文件夹图标,而不是jar图标。当我关闭DAO项目并回顾WEB项目pom.xml文件中的maven依赖项时......现在它将图标显示为jar而不是文件夹。

所以,我必须用maven构建我的dao.jar文件,当它成功时,它就完成了。 然后我必须在Eclipse中关闭项目。 在我的web项目pom.xml文件中,该图标现在将其显示为jar文件,当它构建时,它将拉入jar。

我想如果一个人正在处理几个先前的项目,这是一个好处,你真的有机会在战争运行时查看jar文件中的内容。

在我的情况下,我知道我的dao.jar正在工作,所以我可以构建它,关闭项目,然后在我需要的地方使用那个jar。

感谢您的帮助!