我继承了一个 .Net/Java 项目组合,其中有不同的“模块”,一些模块依赖于其他模块,一些模块是独立的。它不是一个真正的多模块项目(没有聚合器 POM)。
我正在使用 Intellij(社区)来编译/调试这些,但我无法这样做,早些时候这些是使用 Eclipse(.classpath,.project)制作的,现在团队(管理)想要转移到 Intellij 和 VSTS CI.
更多信息
- Web 应用程序打包为 war,并使用 Windows 上的 WIX 部署到 Tomcat
- 应用一些自定义 jar(无可用源)。
- 有人要求我避免使用本地存储库。
- Maven 网站/Github 上的多模块项目无法编译/想要
我为每个依赖的 Java 项目使用
mvn clean install
- 所有 java 项目都是带有 POM.XML 的 maven 项目
问题:
如何使用此结构创建多模块项目(可以 也可以在 intellij/Eclipse 中导入)。
如何使用 Maven/Intellij compile/debug 编译生成的多模块项目。
Gradle是不是更适合这里。
作为一名新的 Java 程序员,当您无法与创建它的人联系/交谈时,更改和部署已经存在的设置真的很困难:(。
任何帮助/方向/建议都会非常有帮助。
项目结构(JAVA)
C:\SomeProj\
├── Jars
| ├── Java
| | └── extJar2.jar
| | └── extJar3.jar
| | └── extJar4.jar
| | └── extJar5.jar
| | └── javax.servlet-3.0.jar (Why is this externally required)
| └── SomeFolder1
| | └── extJar1.jar
├── Source
| ├── Common
| | ├── DAL (JAVA - jar) [Depends On Logger]
| | ├── Logger (JAVA - Jar)
| ├── API
| | ├── DataInput
| | | ├── InfoPuller (JAVA - Jar) [Depends On Logger]
| | ├── Info
| | | └── MyWebApi (JAVA-WAR) [Depends On DAL and Logger]{Application to Build/Run/Deploy from Intellij/MAVEN}
| | └── Util
| | └── JobManager (JAVA - Jar) [Depends On Logger]
| └── WebApp (Js App) {FrontEnd}
最佳答案
- 我认为最好的办法是以尽可能最标准的方式创建一个聚合器项目(例如遵循此处的建议:https://maven.apache.org/guides/mini/guide-multiple-modules.html); 如果您是 Maven 的新手,它可能看起来很吓人,但这可以小到单个文件(它甚至可以在您的某个项目的子文件夹中,尽管我不推荐这样做,并建议改用自己的项目)。拥有一个聚合器将对依赖于其他模块等的模块有很大帮助。 生成的聚合项目可以很容易地导入到 Eclipse/IntelliJ 中(例如,Eclipse 有一个功能,它知道从 pom.xml 导入/创建项目文件;IntelliJ 有一个类似的功能)。
- 生成的项目(如果设置正确)可以通过默认的 maven 生命周期编译/打包,或者使用
mvn compile
或mvn package
。显然,您也可以通过 IDE 运行东西,但您可能需要做一些零碎的工作(设置运行时/服务器等)。 例如,我通过 maven 为CI
构建项目,但出于开发目的,我也通过 eclipse 运行它们。我正在使用我的 pom.xmls 作为单一事实来源。 - 您刚刚描述了我认为是多模块项目的经典用例;您要求的是一个自以为是的答案,最终归结为“这取决于您的喜好”。我个人不了解 Gradle,但我没有在您的描述中看到看起来很奇怪的元素。所以我认为如果你的团队成员对 Gradle vs Maven 等有更好的了解,你就可以使用 Gradle。
需要考虑的其他事项:
- 关于应用程序自定义 jar:如果它们不存在于 Maven 中央存储库中,或者不存在于某个地方的提供者存储库中,并且如果您想避免使用本地存储库,则可以在您的项目中包含一个存储库;这基本上只是本地 maven 存储库的一种风格,具有明显的优势,它可以与您的项目一起打包,并且其他开发人员不需要执行额外的步骤(即他们不需要执行额外的添加步骤 Artifact 到本地 repo )。有些人不喜欢这种方法,但如果您对“没有本地 repo ;没有公司 repo ”的限制是不可动摇的,那么我看不到任何其他方式
- 我不太明白你在这里说的话:
Multi module Project on Maven website / Github do not compile/ wants me to use mvn clean install for every dependent java project.
我假设您的意思是您在某处找到了一些多模块示例,但它不适合您。没有具体的例子,我不能真正发表评论,只是提到我过去(和现在)使用过多模块构建,它们对我来说工作得很好。
关于您对 mvn clean install
的评论 - 这是一个将项目/模块的 Artifact 安装到本地存储库的 maven 命令,并不是真正需要的,除非这些 Artifact 需要由当前多项目外部的项目使用-模块构建。
关于java - 独立于 IDE 构建 Maven 项目(尤其是 eclipse),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43975512/