Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将maven管理的依赖项复制到war\web inf\lib中,以便在Eclipse中以调试模式运行GWT 2.0应用程序?_Java_Eclipse_Maven 2_Gwt - Fatal编程技术网

Java 如何将maven管理的依赖项复制到war\web inf\lib中,以便在Eclipse中以调试模式运行GWT 2.0应用程序?

Java 如何将maven管理的依赖项复制到war\web inf\lib中,以便在Eclipse中以调试模式运行GWT 2.0应用程序?,java,eclipse,maven-2,gwt,Java,Eclipse,Maven 2,Gwt,我正在将现有项目从GWT1.5.2更新为GWT2.0.0。我们使用maven 2来管理依赖关系,并在Eclipse3.5中进行所有开发 因为我们使用maven来管理依赖关系,所以我没有像GWT指定的那样将所有这些JAR都放在war\web inf\lib目录中。相反,它们位于maven存储库中,正是maven喜欢它们的地方。我已经对项目进行了设置,以便maven能够在开发或web模式下成功构建和启动,并且应用程序能够正确运行 问题是,当我从Eclipse启动时,我得到一个java.lang.No

我正在将现有项目从GWT1.5.2更新为GWT2.0.0。我们使用maven 2来管理依赖关系,并在Eclipse3.5中进行所有开发

因为我们使用maven来管理依赖关系,所以我没有像GWT指定的那样将所有这些JAR都放在war\web inf\lib目录中。相反,它们位于maven存储库中,正是maven喜欢它们的地方。我已经对项目进行了设置,以便maven能够在开发或web模式下成功构建和启动,并且应用程序能够正确运行

问题是,当我从Eclipse启动时,我得到一个java.lang.NoClassDefFoundError。如果在启动之前手动将依赖项复制到war\web inf\lib中,一切都会正常运行,但这不适合长期解决方案。首先,如果我将所有这些JAR检查到我们的版本控制中,这将破坏我们从maven获得的大部分价值。尽管maven很烦人,但抛弃它并不是答案。其次,让开发人员在每次想要调试某些东西时手动复制它们是荒谬的

那么,我可以让Eclipse在启动之前将依赖项复制到war\web inf\lib中吗?有没有我遗漏的替代解决方案

谢谢


Tony

如果您的pom.xml中的packaging方法设置为war,那么它应该将运行时dedencies复制到target/war/WEB-INF/lib中

或者你的项目是建造一个更大的耳朵?如果是这样,您可能应该将pom.xml拆分为多项目格式

至于Eclipse,我对它不是很熟悉,所以在这方面我真的帮不了你。在执行运行或调试时,您是否(或您是否可以)运行maven目标(如“安装”)?

您应该安装并使用它在eclipse中构建项目。这将从eclipse中调用maven作为外部工具

您的maven项目工件类型应该设置为war,这将允许maven发现依赖项并将其捆绑

请参阅以下链接:


这应该不是问题。如果您使用的是Eclipse+WTP,那么WTP允许您声明项目属性中“J2EE模块依赖项”下列出的JAR。这些JAR会自动发布到tomcat(请参见本评论末尾的注释) 您需要在eclipse环境中声明一个M2_REPO变量(在eclipse帮助中搜索“classpath variables”),它应该指向您的本地maven存储库,然后从那里向您的项目添加外部JAR,并将它们标记为“J2EE依赖项”。 我通过大量的项目做到了这一点,Maven和Eclipse并行运行:)(没有m2eclipse)

第二种选择是尝试将Eclipse和Maven与m2eclipse插件集成,正如crowne所提到的,但我发现这是不必要的

如果不使用WTP,还有第三种选择(但应该)。假设您使用tomcat,那么您可以将这些JAR复制到$(tomcat.home)/common/lib。如果您可以只为您的私有tomcat实例(在每个开发人员的机器上)这样做,那么您就可以开始了。 这应该是一个低影响的解决方案,可以在运行时将这些JAR放入类路径,但它的伸缩性不好


注意:不幸的是,Eclipse web项目的类路径可能会令人困惑。将JAR添加到项目的常规构建路径时,它们不会部署(复制)到tomcat。为了解决这个问题,WTP定义了一个称为Webapp库的特殊库——这个库包含项目的WEB-INF/lib文件夹中的所有JAR,以及所有标记为J2EE模块依赖项的外部JAR。当发布到tomcat时,所有这些JAR都会找到适合WEB-INF/lib的方式。

运行
gwt:eclipse
目标将maven依赖项复制到
war/WEB-INF/lib
。有关更多详细信息,请参阅的文档中的Eclipse配置部分。还可以了解一下Maven GWT 2.0和Eclipse。

一个支持Maven的IDE(idea、Eclipse、netbeans)应该自动完成这种打包。也许你:

  • 忘记在IDE中启用maven导入
  • 没有将这些依赖项添加到pom.xml(因此它们不包括在“mvn包”阶段)
  • 在依赖项声明中添加了错误的作用域(例如作用域“提供”或“测试”),因此在运行时忽略它们
非常简单: 1.在项目下创建一个“lib”文件夹,如下所示: “\src\main\webapp\WEB-INF\lib” 2.复制您希望包含在WAR包文件夹中的所需“JAR”等。 3.像平常一样调用maven构建。我使用“mvn安装”,它创建并构建war文件

如果您检查WAR文件,您在步骤1和步骤2中包含的JAR将在那里


干杯。

我向Eclipse添加了m2eclipse插件,但这似乎让Eclipse屈服了。现在,它在启动时就陷入了“更新maven依赖项”的困境。一旦我安装了一个新的Eclipse并开始运行,我将尝试一下。本地maven存储库可以缓解依赖项更新问题。我强烈建议您设置一个Nexus实例,并将maven设置为使用mirrorOf=*->本地Nexus repo。最初的更新需要一些时间,但此后,您团队的其他成员将下载本地缓存的工件,这对您、您的团队、公共maven repos和互联网的其他成员都有好处。m2eclipse插件肯定会让您的生活更轻松。它查找项目之间的引用并通过Eclipse将它们链接起来,这样您就不必在每次修改依赖项目时都转到命令行来重建快照。它还为您创建类路径,并使其与pom文件保持最新。我所看到的唯一问题是,有时它无法下拉新的依赖项,因此当您添加不在本地存储库中的新依赖项时,必须从命令行执行“mvn dependency:resolve”。这没有帮助。