java - 独立于 IDE 构建 Maven 项目(尤其是 eclipse)

标签 java maven tomcat intellij-idea gradle

我继承了一个 .Net/Java 项目组合,其中有不同的“模块”,一些模块依赖于其他模块,一些模块是独立的。它不是一个真正的多模块项目(没有聚合器 POM)。

我正在使用 Intellij(社区)来编译/调试这些,但我无法这样做,早些时候这些是使用 Eclipse(.classpath,.project)制作的,现在团队(管理)想要转移到 Intellij 和 VSTS CI.

更多信息

  1. Web 应用程序打包为 war,并使用 Windows 上的 WIX 部署到 Tomcat
  2. 应用一些自定义 jar(无可用源)。
  3. 有人要求我避免使用本地存储库。
  4. Maven 网站/Github 上的多模块项目无法编译/想要 我为每个依赖的 Java 项目使用 mvn clean install
  5. 所有 java 项目都是带有 POM.XML 的 maven 项目

问题:

  1. 如何使用此结构创建多模块项目(可以 也可以在 intellij/Eclipse 中导入)。

  2. 如何使用 Maven/Intellij compile/debug 编译生成的多模块项目。

  3. 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}

最佳答案

  1. 我认为最好的办法是以尽可能最标准的方式创建一个聚合器项目(例如遵循此处的建议:https://maven.apache.org/guides/mini/guide-multiple-modules.html); 如果您是 Maven 的新手,它可能看起来很吓人,但这可以小到单个文件(它甚至可以在您的某个项目的子文件夹中,尽管我不推荐这样做,并建议改用自己的项目)。拥有一个聚合器将对依赖于其他模块等的模块有很大帮助。 生成的聚合项目可以很容易地导入到 Eclipse/IntelliJ 中(例如,Eclipse 有一个功能,它知道从 pom.xml 导入/创建项目文件;IntelliJ 有一个类似的功能)。
  2. 生成的项目(如果设置正确)可以通过默认的 maven 生命周期编译/打包,或者使用 mvn compilemvn package。显然,您也可以通过 IDE 运行东西,但您可能需要做一些零碎的工作(设置运行时/服务器等)。 例如,我通过 maven 为 CI 构建项目,但出于开发目的,我也通过 eclipse 运行它们。我正在使用我的 pom.xmls 作为单一事实来源。
  3. 您刚刚描述了我认为是多模块项目的经典用例;您要求的是一个自以为是的答案,最终归结为“这取决于您的喜好”。我个人不了解 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/

相关文章:

java - 通过 SSLSocketFactory 连接时接受 Java 自签名证书

JavaFX:如何创建两列按钮?

java - 如何让 Azure App Service Tomcat 将所有 80/443 流量转发到在同一 App Service 上运行的 JBoss

Maven 版本 : Prepare/Perform after Rollback incorrectly succeeds with wrong content

java - Tomcat 连接池中的基本问题

java - Tomcat 7 停止接收 HTTP 请求

java - 在Java中串行执行Threadgroup中的线程

java - 在中央存储库中找不到 Maven ojbc 6 jar

java - 设置 M2_REPO 类路径

java - tomcat运行在8080端口却无法通过ip地址远程访问?