【发布时间】:2014-10-29 18:08:07
【问题描述】:
我正在将单个 Eclipse Maven 管理的 webapp 项目转换为一个多模块 Maven 项目(这是一个测试 Maven 的测试项目,因此请随时提供任何建议)。
单个项目 webapp 没有任何错误,成功编译并在部署时行为正确,所以我从一个工作应用程序开始。
该应用程序有一个 Web 部件和一个控制台部件,这意味着有一些具有 main() 方法的类在从 Eclipse 中运行时(使用 Run as -> Java Application)按预期工作。这两部分都显示来自数据库的数据,直接通过 JDBC 或通过 jOOQ 查询。
所以,这就是我拆分项目的方式:
- 核心(包含其他两个部分共有的所有内容);
-
可运行(包含具有
main()方法的类); - webapp(网络应用程序部分)。
在 Eclipse 中,我现在有 4 个独立的项目:
-
shaker-multi包含聚合器(和父)POM,以及子目录中的每个模块; -
shaker-multi-core; -
shaker-multi-runnable; -
shaker-multi-webapp。
在Eclipse内部,core和webapp编译,后者可以部署到Tomcat实例中,我可以在浏览器中看到。
runnable 出现问题。该项目依赖于 jOOQ 类,因此必须生成相关的源代码。 jOOQ 依赖项和配置在core/pom.xml 中(因为它们也可能在那里使用)。
当我执行项目时 -> 运行方式 -> Maven 构建... -> clean generate-sources, 在 shaker-multi-core 我得到:
无法解析的父 POM:找不到 sunshine.web:shaker-multi:pom:0.0.1
这听起来很合理,因为我没有安装任何这些工件,即使在我的本地存储库中也是如此。
但是当我在shaker-multi 上调用 Maven build... -> 'clean install' 时,它会中断,因为它找不到shaker-multi-webapp 的web.xml 文件(尽管它正确驻留在shaker-multi-webapp/src/main/webapp/WEB-INF/web.xml 中) .
我该怎么办? 我的项目配置/拆分完全错误吗? 我应该用父 POM 添加另一个模块吗?这听起来是错误的,因为 POM 参考声明:
继承和聚合创建了一个很好的动态来通过单个高级 POM 控制构建。 您经常会看到既是父项又是聚合者的项目。
我完全迷路了。
我的期望:
- 在
shaker-multi-webapp上运行Maven package并获得可部署的war; - 在
shaker-multi-runnable上运行Maven package并获得一个可运行的命令行jar(我仍然需要配置它的POM 来生成一个带有依赖关系的jar,不过,我知道);李> - 在
shaker-multi上运行Maven package并获得某种我可以移动的bundle,其中包含war 或jar每个模块的 em>。
编辑
我加了
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<webXml>src/main/webapp/WEB-INF/web.xml</webXml>
</configuration>
</plugin>
到shaker-multi-webapp POM,如this answer 所示,但没有区别。
EDIT-2
我清除了整个本地存储库(如建议的 here),当我重新打开 Eclipse 时,我在 Maven 控制台中看到了
[...] 05/09/14 07:58:19 CEST:[INFO] 添加源文件夹 /shaker-multi-webapp/src/main/java 05/09/14 07:58:19 CEST:[INFO] 添加源文件夹 /shaker-multi-webapp/src/test/java **05/09/14 07:58:19 CEST:[错误] 无法读取 web.xml** [...]有什么提示吗?它从哪里来?我无法重现它(无需再次删除我的整个本地仓库)。
这是shaker-multiPOM:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>sunshine.web</groupId>
<artifactId>shaker-multi</artifactId>
<version>0.0.1</version>
<packaging>pom</packaging>
<modules>
<module>shaker-multi-core</module>
<module>shaker-multi-runnable</module>
<module>shaker-multi-webapp</module>
</modules>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
</project>
这是shaker-multi-corePOM:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>sunshine.web</groupId>
<artifactId>shaker-multi</artifactId>
<version>0.0.1</version>
</parent>
<artifactId>shaker-multi-core</artifactId>
<packaging>jar</packaging>
<build>
<plugins>
<plugin><!-- jOOQ plugin--></plugin>
</plugins>
</build>
<dependencies>
<dependency><!-- jOOQ dependency --></dependency>
</dependencies>
</project>
这是shaker-multi-webappPOM:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>sunshine.web</groupId>
<artifactId>shaker-multi</artifactId>
<version>0.0.1</version>
</parent>
<artifactId>shaker-multi-webapp</artifactId>
<packaging>war</packaging>
<build>
<plugins>
<plugin><!-- Tomcat local -->
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>sunshine.web</groupId>
<artifactId>shaker-multi-core</artifactId>
<version>0.0.1</version>
</dependency>
<dependency>
<!-- JSP & Servlet dependencies -->
</dependency>
</dependencies>
</project>
【问题讨论】:
标签: java eclipse maven maven-3 multi-module