老项目转为maven的步骤详细说明

本文详细介绍了如何将现有项目转换为Maven项目,并提供了关键步骤和注意事项,包括配置pom.xml、使用MyEclipse转为Maven项目、移动源代码目录以及发布流程。特别强调了设置settings.xml进行发布时的认证过程,以及处理编码问题的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

可先阅读

其实之前已转过几个,但忘了记录下来,今天又转了一个项目,补记录一下。

步骤

1、写pom.xml

最耗费时间的一步。因为不用maven的话,都是一堆jar包,都引入就行,用ant或eclipse都可编译。但是maven的pom.xml需要明确使用哪些jar,当然你也是一堆都写入pom也可以,但是你会发现太多了烦死你,还不如整理一下哪些是真正需要的jar包。

2、在myeclipse转为maven项目

如果你不用eclipse,可跳过此步。
方法是鼠标放在项目上,右键-Configure-Convert to Maven project(或者直接手工修改.project文件也行)

3、移动源代码目录

在src下建main和java,把原src下com的全部源代码移过去。maven只认这个目录,不移动的话mvn compile会报没有编译的代码。
当然,resource也同样道理。

使用

上面三步基本就ok了。
使用的方法是:
清空:mvn clean
编译:mvn compile
打包:mvn clean package
发布:mvn clean deploy
(直接mvn package或者mvn deploy也可以,但是不建议。gradle的发布是publish,单词不太一样)

清空、编译、打包都不需要用户名密码,但是发布就需要了。否则会报错:

…/framework/1.0-SNAPSHOT/framework-1.0-20150704.084651-1.jar.
Return code is: 401, ReasonPhrase: Unauthorized. -> [Help 1]

办法是配置settings.xml(必须配置这个,不能通过配置pom.xml,这一点和gradle不太一样)

    <server>
      <id>proj-snapshots</id>
      <username>deployment</username>
      <password>deployment123</password>
    </server>

用户可以通过nexus来建,默认就有deployment用户,密码默认是加123,不建议用admin用户。
尤其注意,id不能乱填,必须是里的id。

几个要点

  • 发布后可以在nexus/content/repositories/snapshots下看到jar,如果是snapshot,会后面自动加上日期和序号,这是maven对snapshot的特性,用于给别的工程自动更新关联编译。如果你什么都没改,又执行一下deploy命令,会在该目录下再生成一个jar。
    这里写图片描述

  • [ERROR] /F:/code/bss_gd-trunk/mapp/zplat/framework/src/main/java/com/info/appframework/common/TimeUtil.java:[295,37] 编码GBK的不可映射字符

    解决方法:pom.xml里配置《project.build.sourceEncoding>UTF-8《/project.build.sourceEncoding>

转载请标明出处:
本文出自:【ouyida3的博客
2015.7.4

<think>好的,我现在需要帮助用户将Gradle项目转换为Maven项目。首先,我得回想一下Gradle和Maven之间的主要区别,以及转换过程中需要注意的地方。 首先,Gradle和Maven都是构建工具,但它们的配置方式不同。Gradle使用Groovy或Kotlin DSL的构建脚本,而Maven使用XML的pom.xml。转换的核心在于将Gradle的构建配置迁移到Maven的pom.xml中。用户可能关心依赖项、插件、仓库配置以及构建生命周期中的各个阶段如何对应。 我需要考虑用户可能的步骤。首先,生Maven的pom.xml。Gradle有一个Maven插件,可以生pom文件,但可能需要调整。记得用户需要应用maven-publish插件,然后配置发布任务,最后运行生任务。这时候生的pom可能不完整,尤其是多模块项目或者使用了自定义源集的情况。 然后是手动调整pom.xml。依赖项方面,Gradle的implementation、api等配置需要对应到Maven的scope,比如compile、runtime等。可能需要检查每个依赖的scope是否正确。插件部分,Maven的插件和Gradle的不同,比如Surefire用于测试,Compiler插件指定Java版本,这些需要添加到pom中。仓库配置也要从Gradle的repositories迁移到Maven的repositories部分。 构建生命周期方面,Gradle的任务可能需要映射到Maven的生命周期阶段。例如,Gradle的build可能对应Maven的package阶段。如果项目中有自定义任务,可能需要通过Maven插件来配置,或者调整构建步骤。 多模块项目的处理会更复杂,每个子模块都需要独立的pom.xml,并且父pom中需要声明modules。聚合和继承在Maven中需要正确设置,特别是父pom的packaging类型和relativePath。 接下来是潜在的问题。生的pom可能遗漏一些信息,比如资源过滤、自定义源集、测试配置等。例如,Gradle中可能有不同的测试任务配置,或者资源目录被修改过,这些在Maven中需要手动调整。依赖冲突也可能出现,因为Maven和Gradle处理依赖的方式不同,特别是版本冲突解决策略,可能需要调整依赖的版本或排除某些传递依赖。 用户可能还关心构建脚本的转换,比如自定义任务。在Maven中,可能需要使用插件来实现相同的功能,或者编写自定义插件,这对用户来说可能比较复杂。 另外,持续集和部署流程也需要调整,比如从Gradle命令改为Maven的mvn命令。比如原本的gradle build会变mvn clean package。 总结一下,转换步骤大概是:生初始pom,手动调整依赖、插件、仓库,处理多模块结构,测试构建,解决依赖和配置问题。用户可能需要逐步验证每个部分是否正确,特别是构建结果是否一致。 现在需要考虑用户可能的疑问点:是否所有Gradle功能都能在Maven中找到对应?答案是否定的,有些Gradle灵活的配置可能需要用Maven插件或变通方法实现。另外,转换后的维护本是否更高,特别是如果项目之前大量使用Gradle的特性,转换到Maven可能会增加配置的复杂性。 最后,我应该建议用户详细检查生的pom,并逐步测试各个构建阶段,确保功能一致。同时,如果项目较为复杂,可能需要查阅Maven文档或寻求更多工具支持,比如使用第三方转换工具,或者考虑是否真的有必要转换,因为Gradle和Maven各有优劣,转换可能带来额外的工作量。</think>将 Gradle 项目转换为 Maven 项目主要涉及将 `build.gradle` 的配置迁移到 Maven 的 `pom.xml` 文件,并调整构建流程。以下是具体步骤和注意事项: --- ### **1. 生 Maven 的 `pom.xml`** Gradle 提供 `maven-publish` 插件,可自动生基础 `pom.xml`,但需手动补充细节。 #### **操作步骤**: 1. **在 `build.gradle` 中添加插件**: ```groovy plugins { id 'maven-publish' } ``` 2. **配置发布信息**: ```groovy publishing { publications { maven(MavenPublication) { from components.java // 如果是 Java 项目 groupId = 'com.example' artifactId = 'my-project' version = '1.0.0' // 可选:添加依赖和插件配置 } } } ``` 3. **生 `pom.xml`**: ```bash ./gradlew generatePomFileForMavenPublication ``` 生的 `pom.xml` 位于 `build/publications/maven/pom-default.xml`。 --- ### **2. 手动调整 `pom.xml`** 生的 `pom.xml` 可能不完整,需手动补充以下内容: #### **依赖迁移**: - 将 Gradle 的 `dependencies` 块转换为 Maven 格式: ```xml <!-- Gradle 示例:implementation 'org.apache.commons:commons-lang3:3.12.0' --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.12.0</version> <scope>compile</scope> <!-- Gradle 的 implementation 对应 Maven 的 compile --> </dependency> ``` - `implementation` → `compile` `testImplementation` → `test` `runtimeOnly` → `runtime` #### **插件配置**: - 将 Gradle 插件转换为 Maven 插件。例如: ```xml <!-- Maven 编译插件(设置 Java 版本) --> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.11.0</version> <configuration> <source>11</source> <target>11</target> </configuration> </plugin> </plugins> </build> ``` #### **仓库配置**: - 将 `repositories` 和 `dependencies` 中的仓库声明迁移到 `pom.xml`: ```xml <repositories> <repository> <id>maven-central</id> <url>https://repo.maven.apache.org/maven2</url> </repository> </repositories> ``` --- ### **3. 处理多模块项目** 若 Gradle 项目是多模块的,需为每个子模块创建独立的 `pom.xml`,并在父级添加聚合配置。 #### **父 `pom.xml`**: ```xml <modules> <module>submodule1</module> <module>submodule2</module> </modules> ``` --- ### **4. 常见问题与解决** 1. **依赖范围不匹配**: - Maven 的依赖作用域(scope)可能与 Gradle 不同,需检查是否遗漏 `provided`、`test` 等配置。 2. **资源过滤与目录结构**: - Gradle 默认资源目录为 `src/main/resources`,与 Maven 一致,但若自定义过路径需手动调整。 3. **插件功能差异**: - 部分 Gradle 插件(如 `application`)在 Maven 中无直接等价物,需改用 Maven 插件(如 `maven-assembly-plugin` 打包可执行 JAR)。 --- ### **5. 验证构建** ```bash mvn clean package # 执行构建并运行测试 ``` --- ### **工具辅助** - **gradle2maven**:第三方工具(如 [GitHub 开源项目](https://github.com/fayder/rest-gradle-to-maven)),可辅助转换简单项目。 - **IntelliJ IDEA**:支持导入 Gradle 项目后导出为 Maven 项目(需手动调整)。 --- ### **是否值得转换?** - **Gradle 优势**:灵活性高,适合复杂构建逻辑。 - **Maven 优势**:标准化配置,适合简单项目或需要与旧系统兼容的场景。 如果项目重度依赖 Gradle 特性(如增量构建、自定义任务),转换可能得不偿失。建议根据团队熟悉度和项目需求权衡。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值