最好将您的项目 jar 文件 Mavenize 或将它们放在 WEB-INF/lib 中?
Posted
技术标签:
【中文标题】最好将您的项目 jar 文件 Mavenize 或将它们放在 WEB-INF/lib 中?【英文标题】:Is it best to Mavenize your project jar files or put them in WEB-INF/lib? 【发布时间】:2011-09-28 02:23:40 【问题描述】:我一直在为我的 Spring MVC 项目需要的所有 jar 文件执行此操作:
call mvn install:install-file -DgroupId=vegetables -DartifactId=potatoes -Dversion=1.0 -Dfile=vegetables-1.0.jar -Dpackaging=jar -DgeneratePom=true
最近我一定超出了您可以在pom.xml
文件中列出的依赖项数量的限制,因为我收到一条错误消息:
Your command line is too long
所以我从 pom.xml
中删除了一些我的项目不再使用的依赖项,并且我能够再次使用 maven 运行该项目。
我的问题是,我是否应该像迄今为止所做的那样将所有 jar 文件安装到我的 Maven 存储库中?还是应该将其中的一些放到WEB-INF/lib
目录中?
这里的最佳做法是什么?
【问题讨论】:
当错误发生时你的pom.xml
有多少依赖?
我没有关于最佳实践的答案......但我可以告诉你,许多 shell(例如 Windows cmd.exe 和 Unix 的 ksh)对 4K 长度的限制一个命令。我们使用 Weblogic 服务器命令行遇到了这个问题。我们最终将我们普遍存在的(但相当静态的)库(如 xerces、xalan、apache commons、apache 集合等)重新打包到一个 common.jar 文件中,并且我们还简化并缩短了服务器目录名称。花了一点时间,但现在一切都开始可靠了。
@splash:当错误发生时,我在pom.xml
中列出了大约 50 个依赖项。
@corlettk:很有趣。我没有意识到这可能是来自外壳的错误。我在Windows 7
上使用cmd.exe
,但不知道有4k
限制。
【参考方案1】:
我一直在用命令行做同样的事情,但是通过在我的 POM 中配置 maven-install-plugin
(请阅读最后的注释):
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<executions>
<execution>
<id>install-vegetables</id>
<phase>initialize</phase>
<goals>
<goal>install-file</goal>
</goals>
<configuration>
<file>$project.basedir/lib/vegetables-1.0.jar</file>
<groupId>vegetables</groupId>
<artifactId>potatoes</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
</configuration>
</execution>
<execution>
<id>install-minerals</id>
<phase>initialize</phase>
<goals>
<goal>install-file</goal>
</goals>
<configuration>
<file>$project.basedir/lib/minerals-1.0.jar</file>
<groupId>minerals</groupId>
<artifactId>rocks</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
</configuration>
</execution>
</executions>
</plugin>
它的效率要低得多,因为文件会一遍又一遍地安装,但它比手动安装要少得多。无论如何,我认为你应该试一试。
【讨论】:
能否更改您的所有依赖项都应位于本地存储库下。根据 Maven 约定/最佳实践,您不应在项目中保留 jar 文件。
将您的项目转换为完全基于战争的 Maven 项目。这会将所有依赖项(jar 文件)放在 webapp 的 WEB-INF/lib
目录下。因此,您不必担心路径很长。
【讨论】:
【参考方案3】:您只需在 pom.xml 文件中添加依赖项,无需手动安装。 Maven 将下载库并在需要时将其放入本地存储库。只有当您想使用第三方(自定义)库时,您才可以将其安装在本地存储库中。
【讨论】:
以上是关于最好将您的项目 jar 文件 Mavenize 或将它们放在 WEB-INF/lib 中?的主要内容,如果未能解决你的问题,请参考以下文章
为啥将您的 Javascript 文件移动到您也拥有的不同主域?
在 Android 中将资产或原始文件或资源文件作为 File 对象读取
PDI(Pentaho Kettle)Jar 文件的 Maven 依赖项