Maven WAR依赖 - 无法解析包?

Ste*_*all 17 java remoting spring war maven

我有战争依赖​​:

    <dependency>
        <groupId>my.package</groupId>
        <artifactId>myservices</artifactId>
        <version>0.3</version>
        <type>war</type>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

现在,它存在于我的本地存储库中,该类存在于WEB-INF/classes/my/package/myservices.myservices然而,当我去使用时,我得到的包my.package不存在.的Intelli-J知道要改变myservicesmy.package.myservices,而是试图import似乎不工作.

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

Sea*_*oyd 33

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

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

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


sle*_*ske 28

正如其他答案所指出:

  • 在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>
Run Code Online (Sandbox Code Playgroud)

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

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

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

  • 如果使用`<attachClasses>`,则还需要在引用jar的依赖项声明中添加`<classifier> classes </ classifier>`. (11认同)