在 Netbeans 中从 ant 迁移到 maven
Posted
技术标签:
【中文标题】在 Netbeans 中从 ant 迁移到 maven【英文标题】:Migrating from ant to maven in Netbeans 【发布时间】:2010-10-15 15:51:07 【问题描述】:我们的软件是用 Java 编写的,包含许多 (7) 个项目。
这些项目是 Netbeans ant 项目。 我正在考虑将它们转换为 maven2。
我在哪里可以找到做这种事情的一些提示?
【问题讨论】:
【参考方案1】:不要读那本书。它只会让你感到困惑。请阅读这本书:“Maven - 权威指南”http://www.sonatype.com/books/maven-book/reference/。
另外,maven 站点有很多信息,但是结构很糟糕,所以你需要使用 google 来导航。
这是我的建议:
手动执行此操作,而不是使用 IDE 中的“自动”“帮助”。 Maven 集成还没有那么好,在任何 IDE 中都没有。
确保您的程序项目被划分为一个公共伞形模块下的模块,以便每个模块生成一个单独的二进制工件(jar、war、...),可能伴随着其背后源代码的 javadoc工件,带有源代码的 zip 等。基本原则是每个模块产生一个工件,包含该模块下的所有非测试代码。您可以在项目仍由 ant 构建时执行此操作。
每个模块都应该符合标准的 maven 目录布局。构建目标位于 [module]/target/[output-type,例如“类”]。源代码在 [module]/src/main/[src-type 例如“java”] 和 [module]/test/[src-type]。该工件包含 src/main 下的所有代码,并且没有 src/test 下的任何代码,因为它构建到目标目录。您可以在仍然由 ant 构建时执行此操作。
首先改造项目中不依赖于其他模块的子模块。
现在您可以使用工件类型“pom”创建父 maven 模块 pom.xml,它由以下模块之一组成。使用伞形模块作为“父”,为第一个子模块(只有外部依赖的那个)创建一个子模块。请记住,您需要为父级指定版本。记得将子模块添加为父模块中的“模块”。当您创建这样的多模块项目时,请始终使用 $project.version 作为子模块中的版本。父级下的所有模块必须在一次操作中同时发布,如果您使用此设置,maven 将确保所有模块的版本字段保持相同,并在发布期间随处更新。这可能会使重新使用现有编号方案变得困难,但这并不重要。无论如何,您永远不会用完版本号。
添加必要的依赖项,并确保您可以使用来自父模块的命令“mvn clean install”一起构建父模块和子模块。
以同样的方式继续学习其余模块。对同一父项目下其他模块的依赖项也应使用 $project.version 作为它们所依赖的“版本”,即“与此相同的版本”。请注意,为了构建,您所依赖的模块必须使用“mvn install”构建,以便将其部署到您的本地(计算机)存储库。否则依赖模块将无法找到类。 maven 中的模块之间没有源代码依赖关系,仅依赖于安装在本地和远程存储库中的构建和打包版本。如果您来自 ant-projects,这可能会非常令人困惑。从根模块构建,直到您对此感到满意为止。需要两天时间。
不要在 IDE 中使用 maven 集成。这是个坏主意。使用 "mvn idea:idea" 或 "mvn eclipse:eclipse" 将您的工作区设置为非 maven 普通 IDE 项目。 maven 和 IDE 中的模块间依赖机制并不相同,也永远不会相同。此外,如果您有几个 mavenized 项目之间存在依赖关系,那么您希望在工作区中有几个项目之间建立依赖关系。如果您在与父模块相同的目录中创建一个名为“workspace.xml”(或其他)的单独 maven 项目文件,则可以使用 mvn idea:idea/eclipse:eclipse 执行此操作,设置为包含模块的多模块项目“ 。”和“../otherproject”(这里只有单向引用,没有父引用)。如果你运行“mvn idea:idea / eclipse:eclipse -f workspace.xml”,你会得到一个所有这些模块链接在一起的工作区。没有 IDE 集成可以让您这样做。这听起来像是很多额外的工作,但workspace.xml 文件真的很小。它不必包含所有依赖项和所有这些,只需对要在 IDE 中绑定在一起的模块的引用。
【讨论】:
没有svn netbeans:netbeans。但是 NetBeans Maven 插件理解 POM 并很好地处理依赖关系管理:wiki.netbeans.org/MavenBestPractices 在第 2 点,保留构建部署的 ant 脚本部分并在最后替换它会很有帮助。在第 8 点,我发现 eclipse 和 idea 在导入 maven poms 方面比 maven 在创建项目方面做得更好。 YMMV Point#7 似乎不正确。在多模块项目中,maven 确实允许配置对其他模块的依赖项,而无需将它们安装在本地/远程存储库中。 @Vicky :是的,您可以在多模块项目中声明模块之间的依赖关系。但是,依赖项(在编译、测试等期间)将依赖于本地 repo 中引用模块的最后构建的 jar,而不是源代码。支持 maven 的 IDE 通常会检测到这种情况,将其替换为模块间源代码依赖项,这是您在 IDE 中想要的,但是当您使用 maven 构建时,依赖项将是本地存储库。所有依赖项都在那里解决。 顺便说一句:第 8 点不再有效,至少对于 IntelliJ IDEA 无效。你可以直接将父pom文件作为项目打开,它就可以工作。【参考方案2】:我使用 Joseph Mocker 的说明成功地将 NetBeans Ant 项目迁移到 Maven 项目:http://forums.netbeans.org/ptopic55953.html 我引用了重要的部分:
-
关闭项目
将 build.xml、nbproject 文件/文件夹重命名为某个名称,以便 NB 无法识别它们。
关闭并重新启动 NB(因此项目的任何内存缓存知识都消失了)
从其他项目中复制一个空的 pom。
在 NB 中打开项目备份(NB 现在应该将其识别为 maven 项目)
按照 maven 方式重新排列文件 (™)
【讨论】:
【参考方案3】:这不是一件容易的事,因为 Maven2 期望文件以特定的方式组织。无论如何Better Builds with Maven 是一本可以帮助您入门的免费书籍。它将帮助您了解 Maven,并且它还有一个关于迁移的章节。
【讨论】:
【参考方案4】:我发现迁移是不必要的。我真正需要的是自动下载依赖项(库)。
Ivy 也实现了这一点,它仍然使用 maven 存储库。
我通过IvyBeans 解决了将项目从 ant 转换为 ant+ivy 的问题。
【讨论】:
IvyBeans 看起来不再维护。这适用于最新的 netbeans 版本吗?【参考方案5】:我已经构建了一个脚本来将 Ant 构建迁移到 Maven。您可以在此处找到更多信息:
https://github.com/ewhauser/ant2maven
它不会帮助您修复目录结构和/或任何额外的 Ant 任务,但它消除了许多繁琐的开始步骤。
【讨论】:
以上是关于在 Netbeans 中从 ant 迁移到 maven的主要内容,如果未能解决你的问题,请参考以下文章
在 IDE Netbeans 中从 java 连接到 MySQL 数据库
在 NetBeans 中编译 Maven 项目时 Ant 无法找到环境变量