Codename One 现在允许开发者选用 Gradle 来构建项目。这个框架本身是用一套 Java 或 Kotlin 代码库,同时产出 iOS、Android、桌面和 Web 应用的开源方案。过去它默认走 Maven 那套目录结构,现在多了一个选项。
官方拿仓库里现成的 HelloCodenameOne 示例做了转换。这不是两个不同的 Hello World 程序互相比大小,是同一个应用换了骨架。
![]()
小项目为什么让人更舒服
Maven 的应用布局里,根 POM 加上一堆平台模块,每个模块都为原生代码预留了位置。结构是清楚了,但一个新应用往往在这些地方一行代码都没有,空目录先占着地方。
新的构建方式起步时只带它真正需要的源码和配置。原生目录要等你生成原生接口时才出现,后端子项目要等你添加后端时才出现。生成出来的 settings.gradle.kts 短到可以整段贴出来看,去掉注释后只剩插件仓库、插件版本和项目名三件事。
这种精简对人有好处,对机器也有。一个不熟悉的项目,文件越少越容易看懂。当 AI 代理在构建上下文时,它看到的无关文件也更少。文件数量的减少是可以量化的,但具体省下多少上下文,取决于你的代理实际读了哪些文件。
换工具不等于换引擎
官方没有为新的构建方式单独实现一套平台构建器。插件调用的是 Maven 那套共享引擎,上传暂存、本地构建器、CSS 编译、字节码合规检查都在里面。
生成出来的项目可以直接跑这些命令:
- ./gradlew run 启动模拟器
- ./gradlew cn1Test 走模拟器测试运行器
- ./gradlew buildJavascriptLocal 本地构建 JavaScript 端口
- ./gradlew buildIosXcodeProject -Popen=false 生成 Xcode 工程
提交云端构建的任务同样可用,服务要求和 Maven 那边一致。限制也有:跑这套工具需要 JDK 17 或更新版本、Gradle 8.5 或更新版本,生成的 wrapper 会自带 Gradle。这些项目面向 Java 17,不支持旧的 .cn1lib 文件和老的资源 Designer 任务。OpenAPI、gRPC、GraphQL 生成器以及设备端调试辅助工具,目前仍然只有 Maven 目标,没有对应的 Gradle 任务。
不要客户端,只要一个后端
在 Initializr 里把构建工具选成 Gradle,项目类型选 Backend only,服务器就落在根目录,带着自己的 Java 源码和应用属性。没有客户端主题,没有模拟器模块,也没有一堆空的原生目录。
假设生成的项目叫 MyService,开发时这样起服务:
CN1_PROFILE=dev ./gradlew runBackend
它在 JVM 上跑开发服务器。改后端代码前要先停掉它,这是重启式工作流,不是热重载。要构建并运行原生可执行文件,先 ./gradlew backendPackage,再 CN1_PROFILE=dev PORT=9000 ./build/MyService。
开发 profile 用的是生成好的内存 SQLite 配置,不带这个 profile,启动器会去读生产设置,并且要求提供 DATABASE_URL。可执行文件的名字跟着项目名走。
已有的 Gradle 项目想加一个服务器,可以跑 ./gradlew addBackend,再用 CN1_PROFILE=dev ./gradlew :backend:runBackend 起服务,或者用 ./gradlew :backend:backendPackage 打包。
和 Maven 项目并存试用
转换器会保留原项目,另外写一个同级项目。目标目录必须为空或不存在。转换会把源码、资源、CSS 和平台实现带进新布局,并把应用的字节码目标提升到 Java 17。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.