将现有的 Eclipse 项目转换为 Maven 项目
Posted
技术标签:
【中文标题】将现有的 Eclipse 项目转换为 Maven 项目【英文标题】:Convert Existing Eclipse Project to Maven Project 【发布时间】:2011-01-27 19:30:59 【问题描述】:对于工作中的项目,我们正在考虑使用 Eclipse 的 Maven 插件来自动化我们的构建。现在这个过程比它应该的要复杂得多,我们希望 Maven 将事情简化为一键构建。
我的问题是,是否有使用 Maven 插件将现有 Eclipse Java 项目转换为 Maven 项目的向导或自动导入器? 或者我应该创建一个新的 Maven 项目并手动复制所有源文件、库等。
【问题讨论】:
您现有的构建是否使用 Ant 脚本? 你应该切换接受的答案 【参考方案1】:如果您只想创建一个默认 POM 并启用 m2eclipse 功能:所以我假设您当前没有尝试导入的替代自动构建设置,并且我假设您正在谈论m2eclipse 插件。
m2eclipse 插件在项目上提供了一个右键单击选项来添加这个默认的 pom.xml:
较新的 M2E 版本
右键项目->子菜单配置->转换为Maven项目
旧的 M2E 版本
右键单击项目 -> 子菜单 Maven -> 启用依赖管理。
这将完成为该项目启用插件所必需的操作。
回答“是否有自动导入器或向导?”:我不知道。使用上面的选项将允许您为现有项目启用 m2eclipse 插件,从而避免手动复制。您仍然需要实际设置依赖项和其他需要自己构建的东西。
【讨论】:
虽然它启用了 M2Eclipse,但它并不是真正的向导,它不会导入现有的 Eclipse 项目。相反,它为用户提供了选择依赖项等的选项,如果用户对 Maven 没有太多经验,这可能会很困难。 我将这个问题解释为“我需要创建一个新项目并手动复制东西以使用 m2eclipse 插件吗?”,我会澄清一下。 右键菜单(最新m2eclipse)对我来说maven菜单项不可用,城东的回答有效。 在当前版本的 Eclipse (4.2) 和 m2eclipse 上,菜单项是 Convert / Convert to Maven Project。 @Jesper 菜单项是“配置/转换为 Maven 项目”【参考方案2】:我的问题是,是否有使用 Maven 插件将现有 Eclipse Java 项目转换为 Maven 项目的向导或自动导入器?
据我所知,没有什么可以自动将 Eclipse 项目转换为 Maven 项目(即修改布局、创建 POM、“生成”并向其提供元数据、检测库及其版本以添加它们到 POM 等)。 Eclipse 只是没有足够的元数据来实现这一点(这正是 POM 的重点)和/或产生体面的结果。
或者我应该创建一个新的 Maven 项目并手动复制所有源文件、库等
在我看来,这将是最好的选择。创建一个 Maven 项目,将源、资源、测试、测试资源复制/移动到各自的目录中,声明依赖项等。
【讨论】:
为什么这个答案比+199的答案高?我几乎没看到那个【参考方案3】:从 m2e 0.13.0(如果不早于)开始,您可以从上下文菜单中将 Java 项目转换为 Maven 项目。方法如下:
右键单击Java项目弹出上下文菜单 选择 配置 > 转换为 Maven 项目这是detailed steps 的屏幕截图。
【讨论】:
这仍然不会创建目录结构并在pom中添加依赖项。 m2e还没有创建maven目录结构并在pom中添加依赖吗? 下面提到的我的解决方案 (@ShriKant Vashishtha) 解决了这里描述的所有问题。创建 Maven 结构,删除文件夹名称中的空格,创建 pom.xml 并在 Maven 结构中移动源文件夹 当时在 Windows 10 Eclipse Mars 上完美无瑕。 它对我来说很完美【参考方案4】:我遇到了同样的问题,想对包含大约 60 个 Eclipse 项目的整个 Eclipse 工作区进行 Mavenise。手动执行此操作需要大量时间,并且替代选项并不可行。为了解决这个问题,我最终在 github 上创建了一个名为 eclipse-to-maven 的项目。由于 eclipse 没有关于依赖项的所有必要信息,它执行以下操作:
基于 .classpath 文件中的<classpathentry/>
XML 元素,它创建对另一个项目的依赖关系,标识库 jar 文件并根据其名称(例如 jakarta-oro-2.0.8.jar)标识它的版本。目前artifactId
和groupId
相同,因为我找不到可以根据artifactId
返回依赖项的Maven groupId 的东西。虽然这不是一个完美的解决方案,但它为加速 Mavenisation 提供了良好的基础。
它根据 Maven 约定移动所有源文件夹(如 src/main/java
)
由于名称带空格的 Eclipse 项目在 Linux/Unix 环境下难以处理,因此它也使用不带空格的名称重命名它们。
生成的 pom.xml 文件包含依赖项和基本 pom 结构。您必须手动添加所需的 Maven 插件。
【讨论】:
有趣!移植到 Luna 了吗?该项目是否仍然是 Eclipse 项目(有效的.classpath
和 .project
文件)?您能否在答案中添加如何使用您的插件来 mavenize 一个简单的 JavaSE 项目 - 目录结构的实际变化是什么?
对不起,我不知道 Luna 是什么。随着项目目录结构的更改,它将不再是有效的 Eclipse 项目。然而,使用 Maven 创建修改后的 eclipse 配置很容易。这不是一个插件,而是一个工具。如何运行它已经在项目的 README 中提到。目录结构按照 Maven 约定进行转换。所以所有的来源都去 src/main/java 例如。
Luna 是 eclipse 的最新版本!!【参考方案5】:
城东的回答是正确的,你应该使用Configure>Convert to Maven Project
。不过,我必须补充一下,自从 m2e 0.13.0 以来,转换过程有了很大的改进:m2e 1.1+ 和 m2e-wtp 0.16.0+ 现在可以convert the existing eclipse settings into maven plugin configuration 了。
至于依赖转换问题,你可以试试JBoss Tools (JBT) 4.0 Maven集成特性,里面有一个实验性的转换向导,插入m2e的转换过程:http://docs.jboss.org/tools/whatsnew/maven/maven-news-4.0.0.Beta1.html。
它并不假装是最终解决方案(没有什么可以),它应该极大地帮助引导您的 Maven 转换过程。
另外,仅供参考,这里是some ideas to enhance m2e's conversion process,未来很可能会实现重构以使用 Maven 布局。
JBT 4.0(需要 Eclipse JavaEE Juno)可以从 http://download.jboss.org/jbosstools/updates/stable/juno/ 或 Eclipse Marketplace 安装
【讨论】:
【参考方案6】:右键单击项目名称>配置>转换为Maven项目>单击完成。在这里,您将添加一些依赖项以下载并添加您预期的 jar 文件。
这将创建一个自动生成的 pom.xml 文件。在 Eclipse 编辑器中以 xml 格式打开该文件。在构建标签 (</build>
) 之后,添加您可以从 maven 网站复制的依赖项并将它们添加到那里。现在你可以走了。这些依赖会自动添加你需要的jar文件。
【讨论】:
这会创建maven文件夹结构吗? 是的,它将根据适当的映射原型模板和最低配置创建 maven 文件夹结构。您必须自己手动将每个项目依赖项(来自 .classpath)添加到 POM.xml 中。【参考方案7】:这是必要的,因为或多或少,当我们从 git 导入项目时,它不是 maven 项目,因此 maven 依赖项不在构建路径中。
这是我为将一般项目转变为 maven 项目所做的工作。
一般项目-->java项目 右键单击项目,属性->项目方面,单击“java”。 这一步将把一个通用项目变成java项目。
java 项目 --> maven 项目 右键项目,配置->转换为maven项目 此时,maven 依赖库仍然不在构建路径中。 项目属性、构建路径、添加库、添加maven依赖库
并等待几秒钟,当依赖加载完毕后,项目就准备好了!
【讨论】:
【参考方案8】:有一个命令行程序可以将任何 Java 项目转换为 SBT/Maven 项目。
它会解析所有 jar,并尝试根据 SHA 校验和、类路径或文件名找出正确的版本。然后它会尝试编译源代码,直到找到有效的配置。也可以给定每个依赖配置执行的自定义任务。
UniversalResolver 1.0
Usage: UniversalResolver [options]
-s <srcpath1>,<srcpath2>... | --srcPaths <srcpath1>,<srcpath2>...
required src paths to include
-j <jar1>,<jar2>... | --jars <jar1>,<jar2>...
required jars/jar paths to include
-t /path/To/Dir | --testDirectory /path/To/Dir
required directory where test configurations will be stored
-a <task1>,<task2>... | --sbt-tasks <task1>,<task2>...
SBT Tasks to be executed. i.e. compile
-d /path/To/dependencyFile.json | --dependencyFile /path/To/dependencyFile.json
optional file where the dependency buffer will be stored
-l | --search
load and search dependencies from remote repositories
-g | --generateConfigurations
generate dependency configurations
-c <value> | --findByNameCount <value>
number of dependencies to resolve by class name per jar
https://bitbucket.org/mnyx/universalresolver
【讨论】:
这看起来是一个非常有吸引力的选择。但是,由于它目前是打包的,所以不是很容易访问。不清楚如何打包和部署 source.code。大多数 Java 开发人员不是 Scala 开发人员,SBT 也不是社区内广泛使用的工具。【参考方案9】:转换为 Gradle 类似于 Maven:
右击项目 -> 子菜单配置 -> 转换为 Gradle (STS) 项目
【讨论】:
答案与问题无关 我通过寻找 Gradle 发现了这个问题,很多时候为其他操作系统添加答案很有帮助。而不是问的操作系统因为它不存在个案的问题。关于 Gradle,我不会创建一个新问题来回答我认为有帮助的问题,而是发布这个。谢谢和问候。以上是关于将现有的 Eclipse 项目转换为 Maven 项目的主要内容,如果未能解决你的问题,请参考以下文章
将现有的 Flutter Kotlin 项目转换为 Flutter Java 项目