Even with all the correct imports and the mix file configured correctly, I can't generate the executable and it gives the following error:
warning: DesafioCumbuca.main/1 is undefined or private. Did you mean:
* main/0
└─ /home/runner/work/elixir/elixir/lib/mix/lib/mix/tasks/escript.build.ex:396: :desafio_cumbuca_escript.main/1
desafio_cumbuca.ex file:
`
defmodule DesafioCumbuca do
alias InterfaceUsuario
alias ObterNomes
alias EnumerarNomes
def main() do
InterfaceUsuario.mostrar_boas_vindas()
nomes = ObterNomes.obter_nomes([])
nomes_ordenados = EnumerarNomes.enumerar(nomes)
InterfaceUsuario.mostrar_resultado(nomes_ordenados)
end
end`
mix file:
defmodule DesafioCumbuca.MixProject do
use Mix.Project
def project do
[
app: :desafio_cumbuca,
version: "0.1.0",
elixir: "~> 1.17",
start_permanent: Mix.env() == :prod,
deps: deps(),
escript: escript()
]
end
def escript do
[main_module: DesafioCumbuca]
end
# Run "mix help compile.app" to learn about applications.
def application do
[
extra_applications: [:logger]
]
end
# Run "mix help deps" to learn about dependencies.
defp deps do
[
# {:dep_from_hexpm, "~> 0.3.0"},
# {:dep_from_git, git: "https://github.com/elixir-lang/my_dep.git", tag: "0.1.0"}
]
end
end
To generate the executable file I opened the project page and typed "mix compile" and then "mix escript.build"
As pointed out by the error message, the arity of your main
function is 0
(accepts no argument), but escript expects it to be 1
as you can see in this example.
Replacing the following
def main() do
by
def main(_args) do
should fix it.