繁体   English   中英

Maven WAR依赖 - 无法解析包?

[英]Maven WAR dependency - cannot resolve package?

我有战争依赖​​:

    <dependency>
        <groupId>my.package</groupId>
        <artifactId>myservices</artifactId>
        <version>0.3</version>
        <type>war</type>
    </dependency>

现在,它存在于我的本地存储库中,该类存在于WEB-INF/classes/my/package/myservices 但是当我去使用myservices时,我得到包my.package不存在。 Intelli-J知道将myservices更改为my.package.myservices ,但尝试import似乎根本不起作用。

对于这种战争依赖,我需要做些什么特别的事吗?

它只是不起作用。 war文件不应该放在类路径上,而是部署到可以处理其特殊结构的应用程序服务器(或servlet容器)。

当然你可以找到一个可以处理java war文件的自定义类加载器,但它不是这样做的方法。

将代码保存在jar中,在战争中和此应用程序中包含jar。 但是,除非您正在构建EAR文件,否则不要将war用作依赖项。

正如其他答案所指出:

  • 在Maven中,您不能只从JAR工件中加载WAR工件中的类。
  • 因此,建议将一个单独的Maven JAR项目与要重用的类分开,并在原始WAR和新项目中依赖此项目。

但是,如果由于某种原因你不能/不想拆分WAR项目,你也可以告诉Maven除了WAR之外你还需要一个JAR工件。 把它放到WAR项目的POM中:

<build>
    ...
    <plugins>
      ...
      <plugin>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.3</version>
        <configuration>
          <attachClasses>true</attachClasses>
        </configuration>
      </plugin>
    </plugins>
  </build>

然后,在构建WAR项目时,Maven将从中创建WAR JAR。

来源: Maven War插件常见问题解答

改编自doc_180的评论,因此不会被忽视。

Maven根据JAR依赖关系处理WAR依赖关系的方式非常不同。 它们被视为叠加层。

http://maven.apache.org/plugins/maven-war-plugin/overlays.html

我认为你所寻找的东西与WAR覆盖有点不同。 WAR覆盖将文件结构与“最接近的胜利”模型合并,但这意味着像web.xml这样的东西被最接近的胜利所取代,而不是合并。

如果你想要合并(这与大多数人在开始讨论WAR依赖关系时的想法更接近),你应该看看Cargo uberwar插件。

http://cargo.codehaus.org/Merging+WAR+files

如果您的目标只是在两个WAR之间共享一些类,那么您应该将这些类放入JAR项目中。 Maven特别是设计用于pom.xml - >单个工件模型(JAR / WAR / etc)。 尝试使用单个pom.xml并让它为某些东西发出一个JAR,对其他东西发出WAR会非常痛苦。

顺便说一句,如果你正在一个超过一个人的团队工作,你将需要一个很快的工件管理服务器(例如Artifactory,Nexus或Archiva),否则你会疯狂地处理这些东西。 ;)

在WAR中,类必须位于WEB-INF/classes/...而不是classes/...

无论如何,我从来没有尝试从WAR(而不是JAR)引用其他类,我不知道这是否可行。

确保依赖项已安装在本地存储库中。
本地回购应该看起来像:

.m2/my/package/myservices/0.3/myservices-0.3.war

如果不是这种情况,则在将依赖关系中的war安装到本地存储库之前将其安装到本地存储库中:

mvn install:install-file -Dfile="[path-to-war]"  -DgroupId=my.package  -DartifactId=myservices -Dversion=0.3 -Dpackaging=war -DcreateChecksum=true -DgeneratePom=true

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM