以前に構築されたOTPアプリケーションを使用する必要があるシステムを構築しています(Xと呼ぶことができます)。新しいOTPアプリケーション/モジュールを構築したい場合は、たとえばモジュールから既に存在するアプリケーションをどのように使用できますか?既存のOTPアプリケーションを別のアプリケーションまたはモジュール内で使用できますか?
私はそれがapplication
動作に従い以来、私は、start
を呼び出すことができますと仮定し、私は次のコードを持って最小限のアプリケーションYを構築しました:
y.erl:
-module(y).
-behaviour(application).
start(_StartType, _StartArgs) ->
io:format("going to call x_app~n"),
{ok, _} = x_app:start([]),
io:format("called x_app~n"),
y:start_link().
stop(_State) ->
ok = x_app:stop([]),
ok.
鉄筋はこれをコンパイルコードは正常に実行され、警告は生成されません。
rel/y/bin/y start
出力まったく何も(私は、少なくとも1 io:format
の出力を取得することを望んだ) rel/y/bin/y stop
出力Node is not running!
ありがとうございます。だから、 'x:app.src'の適切な設定の後に' application:start(y).'を使用すると、私は期待される結果が得られるでしょうか?私はおそらく 'x_app:start([])'行を削除するべきでしょうか? – goncalotomas
正しいですが、あなたが示したようにあなた自身のコードからアプリを起動すべきではありません。 'y'が' x'に依存している場合は、 'y.app.src'に' x'をリストします。通常のErlangリリーススタートアップマシンは正しい順序で起動されます。 –
アプリケーションの停止はどうですか? 'application:stop(y)'を呼び出すと 'x'も終了しますか? – goncalotomas