Java 将JAR文件添加到web inf/lib文件夹,但不将其包含在pom.xml中

Java 将JAR文件添加到web inf/lib文件夹,但不将其包含在pom.xml中,java,maven,jar,Java,Maven,Jar,我正在使用JBoss编写一个应用服务器。应用程序由Maven编译并打包为WAR。现在我想将一些类外部化。我创建了另一个maven项目,它打包为JAR 我相信JAR有正确的目录树。它包含一个META-INF目录和作为目录的包结构,类文件驻留在其中 我在网上读到,我可以将这个JAR添加到appserver中,方法是将它放入src\main\webapp\web-INF\lib,而不在appserver的pom.xml中进一步提及它(在某些情况下,这些JAR应该是插件,因此在pom.xml中添加依赖项

我正在使用JBoss编写一个应用服务器。应用程序由Maven编译并打包为WAR。现在我想将一些类外部化。我创建了另一个maven项目,它打包为JAR

我相信JAR有正确的目录树。它包含一个
META-INF
目录和作为目录的包结构,类文件驻留在其中

我在网上读到,我可以将这个JAR添加到appserver中,方法是将它放入
src\main\webapp\web-INF\lib
,而不在appserver的pom.xml中进一步提及它(在某些情况下,这些JAR应该是插件,因此在pom.xml中添加依赖项不是一个选项)

当我编译服务器时,JAR被正确地复制到WAR中的
WEB-INF\lib
,以及其他外部依赖项

然而,当我试图在appserver中使用该类时(编写这样一个类的
import
语句就足够了),maven会抱怨它找不到该类

我试图在网上查找信息,但我能找到的只是这样做的方式


有人知道我在哪里可以进一步寻找出问题的线索吗?

将jar文件放入
src\main\webapp\WEB-INF\lib
是一件麻烦的事情,而且显然是错误的

代码不编译的原因是maven编译器插件使用定义的源路径和(提供并编译范围)依赖项

你可以改变这一点,但结果很难理解。此外,您必须手动更新jar文件(顺便说一句,它在源代码中没有位置)

这就是依赖关系管理的目的


不要违背你的工具。如果您的项目需要来自这个jar的类,那么它是一个依赖项。所以就这样声明吧。

将jar文件放入
src\main\webapp\WEB-INF\lib
很麻烦,而且显然是错误的

代码不编译的原因是maven编译器插件使用定义的源路径和(提供并编译范围)依赖项

你可以改变这一点,但结果很难理解。此外,您必须手动更新jar文件(顺便说一句,它在源代码中没有位置)

这就是依赖关系管理的目的


不要违背你的工具。如果您的项目需要来自这个jar的类,那么它是一个依赖项。所以声明它是这样的。

如果你说的是“插件”,那么无论如何你都不应该直接在代码中导入类。一种常见的方法是定义另一个模块,该模块带有插件将实现的接口,然后让主webapp和插件项目都依赖于该接口模块。在主应用程序中,通过反射加载插件类,并将它们转换到适当的接口。这样,在编译宿主应用程序时,您就不会直接依赖于插件的具体类。

如果您说的是“插件”,那么无论如何,您都不应该直接在代码中导入这些类。一种常见的方法是定义另一个模块,该模块带有插件将实现的接口,然后让主webapp和插件项目都依赖于该接口模块。在主应用程序中,通过反射加载插件类,并将它们转换到适当的接口。这样,在编译宿主应用程序时,您就不会直接依赖插件的具体类。

这才有意义。然而,我如何处理“插件”,即只需要放置在某个地方,服务器只需要重新部署的类?你的回答是不是意味着,没有“干净”的方法可以做到这一点?你可以将依赖范围更改为“提供”,以避免它被打包到WAR中。如果我没有错,我认为这是另一个问题。可能我想有一个定制的类加载器,它通过定制添加的jar并执行它需要的任何操作it@GyroGearless嗯,那解决不了问题。我仍然需要在pom中向JAR添加依赖项。我想绕开这件事,这很有道理。然而,我如何处理“插件”,即只需要放置在某个地方,服务器只需要重新部署的类?你的回答是不是意味着,没有“干净”的方法可以做到这一点?你可以将依赖范围更改为“提供”,以避免它被打包到WAR中。如果我没有错,我认为这是另一个问题。可能我想有一个定制的类加载器,它通过定制添加的jar并执行它需要的任何操作it@GyroGearless嗯,那解决不了问题。我仍然需要在pom中向JAR添加依赖项。我想回避这个问题。好的,我一开始问错了问题,谢谢,这让我走得更远:酒后驾车好的,我一开始问错了问题,谢谢,这让我走得更远:D