`降级 Ballerina 版本后无法解决模块`编译错误

问题描述 投票:0回答:1

我安装了 Ballerina Swan Lake 2201.7.2 并使用

bal new hello
命令创建了一个新的 Ballerina 包。
main.bal
文件包含以下代码。

import ballerina/io;

public function main() {
    io:println("Hello, World!");
}

Ballerina.toml
文件内容如下。

[package]
org = "demo"
name = "hello"
version = "0.1.0"
distribution = "2201.7.2"

[build-options]
observabilityIncluded = true

然后我运行了

bal run
命令,它成功地给出了输出。

Compiling source
        demo/hello:0.1.0

Running executable

Hello, World!

然后我使用

2201.6.1
命令将我的 Ballerina Swan Lake 版本更改为
bal dist use 2201.6.1

之后,为了编译并运行 Ballerina Swan Lake 版本

2201.6.1
的包,我使用了
bal run
命令。但它给出了以下错误。

Compiling source
        demo/hello:0.1.0
ERROR [main.bal:(1:1,1:21)] cannot resolve module 'ballerina/io'
ERROR [main.bal:(4:5,4:32)] undefined function 'println'
ERROR [main.bal:(4:5,4:32)] undefined module 'io'
error: compilation contains errors

这是为什么?

dependencies version ballerina downgrade
1个回答
0
投票

Ballerina 保证,鉴于新版本中没有引入向后不兼容的更改,它将继续支持使用较高 Ballerina 版本编译已使用较低 Ballerina 版本编译的软件包。 (通常当存在向后不兼容的更改时,它们会在发行说明中提及。)

由于包使用的依赖项不兼容,无法保证使用较高版本的 Ballerina 编译的 Ballerina 包也可以使用较低版本的 Ballerina 进行编译。例如,上面的场景可以解释如下。

使用 Ballerina 版本

2201.7.2
编译程序时,它会创建包含以下内容的
Dependencies.toml
文件。

# AUTO-GENERATED FILE. DO NOT MODIFY.

# This file is auto-generated by Ballerina for managing dependency versions.
# It should not be modified by hand.

[ballerina]
dependencies-toml-version = "2"
distribution-version = "2201.7.2"

[[package]]
org = "ballerina"
name = "io"
version = "1.5.0"
dependencies = [
    {org = "ballerina", name = "jballerina.java"},
    {org = "ballerina", name = "lang.value"}
]
modules = [
    {org = "ballerina", packageName = "io", moduleName = "io"}
]

[[package]]
org = "ballerina"
name = "jballerina.java"
version = "0.0.0"

[[package]]
org = "ballerina"
name = "lang.value"
version = "0.0.0"
dependencies = [
    {org = "ballerina", name = "jballerina.java"}
]

[[package]]
org = "ballerina"
name = "observe"
version = "1.1.0"
dependencies = [
    {org = "ballerina", name = "jballerina.java"}
]

[[package]]
org = "ballerinai"
name = "observe"
version = "0.0.0"
dependencies = [
    {org = "ballerina", name = "jballerina.java"},
    {org = "ballerina", name = "observe"}
]
modules = [
    {org = "ballerinai", packageName = "observe", moduleName = "observe"}
]

[[package]]
org = "demo"
name = "hello"
version = "0.1.0"
dependencies = [
    {org = "ballerina", name = "io"},
    {org = "ballerinai", name = "observe"}
]
modules = [
    {org = "demo", packageName = "hello", moduleName = "hello"}
]


它显示了 Ballerina 包的依赖项及其支持的最低版本。例如,这里 Ballerina 版本

2201.7.2
至少需要
io
版本
1.5.0

当使用 Ballerina 版本

2201.6.1
编译包时,它会读取此
Dependencies.toml
文件并检查 Ballerina 版本
io
是否支持此
2201.6.1
模块版本。如果没有,则会抛出上述
cannot resolve module  'ballerina/io'
错误。

作为补救措施,您可以删除 Ballerina 版本

Dependecies.toml
创建的
2201.7.2
文件,并使用
2201.6.1
版本编译包。然后它将运行编译并运行代码,没有任何错误。

Compiling source
        demo/hello:0.1.0

Running executable

Hello, World!

您还可以看到使用版本

Dependencies.toml
创建的以下
2201.6.1
文件,其中表示 Ballerina 版本至少需要
io
版本
1.4.1
。虽然
io
版本
1.4.1
属于 Ballerina 版本
io
支持的兼容
2201.6.1
版本范围,但 Ballerina 版本
io
不支持
1.5.0
版本
2201.6.1
。这就是之前发生错误的原因。

# AUTO-GENERATED FILE. DO NOT MODIFY.

# This file is auto-generated by Ballerina for managing dependency versions.
# It should not be modified by hand.

[ballerina]
dependencies-toml-version = "2"
distribution-version = "2201.6.1"

[[package]]
org = "ballerina"
name = "io"
version = "1.4.1"
dependencies = [
    {org = "ballerina", name = "jballerina.java"},
    {org = "ballerina", name = "lang.value"}
]
modules = [
    {org = "ballerina", packageName = "io", moduleName = "io"}
]

[[package]]
org = "ballerina"
name = "jballerina.java"
version = "0.0.0"

[[package]]
org = "ballerina"
name = "lang.value"
version = "0.0.0"
dependencies = [
    {org = "ballerina", name = "jballerina.java"}
]

[[package]]
org = "ballerina"
name = "observe"
version = "1.0.7"
dependencies = [
    {org = "ballerina", name = "jballerina.java"}
]

[[package]]
org = "ballerinai"
name = "observe"
version = "0.0.0"
dependencies = [
    {org = "ballerina", name = "jballerina.java"},
    {org = "ballerina", name = "observe"}
]
modules = [
    {org = "ballerinai", packageName = "observe", moduleName = "observe"}
]

[[package]]
org = "demo"
name = "hello"
version = "0.1.0"
dependencies = [
    {org = "ballerina", name = "io"},
    {org = "ballerinai", name = "observe"}
]
modules = [
    {org = "demo", packageName = "hello", moduleName = "hello"}
]


© www.soinside.com 2019 - 2024. All rights reserved.