問題タブ [parallel-builds]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
eclipse-cdt - Eclipse での並列ビルドが衝突する
2 つの C++ Eclipse プロジェクト (それぞれがバージョン管理されたコードの異なるサンドボックスを指している) を別々のワークスペースにインポートしています。異なるマシンで Eclipse の 2 つの並行セッションを起動してから、これら 2 つのプロジェクトを並行してビルドしたいと考えています。各ワークスペースで開いているプロジェクトは 1 つだけです。これは、対応するセッションでビルドしたいプロジェクトです。しかし、1 つのプロジェクトのビルドを開始するとすぐに、最初のプロジェクトの進行中の別のビルドが 2 番目のプロジェクトのソース ディレクトリを指し始めるようです。つまり、sandbox1 のビルド中に、sandbox2 でファイルのビルドを開始すると進行中の場合、すぐに sandbox1 のログ ビルドは、sandbox2 内のファイルのソース ファイル パスを示し、その逆も同様です。
このような動作の原因は何ですか?また、互いに影響を与えることなく2つのビルドを並行して実行する方法はありますか?
ありがとう、
ローラン
dependencies - 並列ビルドの CMake/Make 依存関係のデバッグ
私は複雑な C++ プロジェクトを管理しています。そのビルド定義は で記述されCMake、ビルド自体は を呼び出すことによって取得されmakeます。ソースツリーは多くのモジュールで構成されており、並列化が容易です。
線形ビルドは常に成功しますが、並列ビルドはほとんどの場合成功します。このようなビルド中に依存関係の問題が発生した場合、通常は修正に取り掛かりますが、問題が発生したときに修正するのではなく、依存関係をプログラムでテストしたいと考えています。
理想的な解決策は、すべての依存関係をCMake調べて修正することですが、ソース ツリーに固有のある種の依存関係に対してカスタム マクロを頻繁に使用するため、これが実際に常に可能であるとは限りません (詳しくは説明できません)。 、 ごめん)。そこで、標準ツールをできるだけ再利用して、問題を別の方法で (そしておそらく効率的に) 解決することを考えていました。
私が最初に考えたのは、ジョブ スケジューリングにある種の「ランダム性」を注入することでした
Make。これにより、ビルド マシンは、障害が発生するまでツリーを再構築することで、さまざまなコンパイル パスを無期限に試行できるようになりました。ただし、別の質問(こちら)では、この機能は では使用できないと指摘されましたMake。だから私は別の解決策を試しました.ジョブスケジューラにノイズをもたらす
g++ために、数秒間スリープするラッパースクリプトを作成しました。もちろん、このソリューションの欠点は、コンパイル時間が長くなることです。 ただし、この部分的な解決策には根本的な欠陥があります。問題が見つかった場合、依存関係が存在しないことが証明されますが、エラーが発生しなければ、すべての依存関係が正しいことを証明することはできません。$RANDOMMake
どう思いますか?どうすれば目標を達成できますか? 標準ツールを再利用し、幅広いユーザーに適用できるソリューションを希望します。
ありがとう。
maven - Maven 集約 POM と並列ビルド
非並列ビルドでは、POM とそのサブモジュールの間に親子関係がない場合、POM は最後にビルドされます (間違っている場合は修正してください)。
それは並列ビルド中に保持されますか? すべてのサブモジュールがビルドされた後にルート POM がビルドされると想定できますか? ビルドログによると、答えは「いいえ」のようですが、何かが足りないのかもしれません。
答えが「いいえ」の場合、集約POMが最後に構築されるようにするにはどうすればよいですか? たとえば、すべてのサブモジュールがビルドされた後にアセンブリ プラグインを実行したい (並列ビルド)? もちろん、別の「mvn -N assembly:assembly」コマンドを実行してビルド済みのものをアセンブルすることもできますが、通常のビルド中にそれを行う方法はありますか?
java - nbm-maven-plugin は maven 並列ビルドに安全に使用できますか?
nbm-maven-plugin を使用するマルチ モジュール プロジェクトがあります。私は現在、maven 3 の並列ビルド機能をテストしています。速度がほぼ 60% 向上するため、結果に非常に満足しています :) 問題は、まだスレッドセーフとしてマークされていないようです。
最新バージョン 3.10.1 を使用しようとしましたが、まだ警告が表示されます。トラッカーにもこれに関してログに記録された問題はありません (問題を作成したかったのですが、登録できないようです?)。
私の質問は、それらを使用しても安全ですか? これまでのところビルドは成功していますが、ビルドが成功しても nbm-maven-plugin のスレッドセーフ性に準拠するとは思えません。
ubuntu - MAKEFLAGS で -j8 を設定すると、再帰的な make で問題が発生しますか?
「-j8」フラグをグローバルに設定することについて質問したところ、答えはに設定MAKEFLAGS="-j8"することを提案しまし/etc/environmentたが、再帰的なmakeの問題になる可能性があるとのことでした。
ただし、GNU のドキュメントには-j8、特別な方法で処理され、make の再帰呼び出しには渡されないと記載されています。
「-j」オプションは特殊なケースです (並列実行を参照)。これを何らかの数値「N」に設定し、オペレーティング システムがそれをサポートしている場合 (ほとんどの UNIX システムではサポートされていますが、通常はサポートされていません)、親の make とすべてのサブ make が通信して、「N」のみが存在することを確認します。 ' それらすべての間で同時に実行されているジョブ。再帰的とマークされたジョブ (「レシピを実行する代わりに」を参照) は、ジョブの合計にカウントされないことに注意してください (そうしないと、'N' 個のサブ make が実行され、実際の作業用にスロットが残っていない可能性があります!)
それで、設定MAKEFLAGS="-j8"は/etc/environment問題がありますか?
parallel-builds - 並列ビルド用に異なる構成 (リリースまたはデバッグ) の特定のビルド エージェントを選択できますか?
Parallel Template( Jim Lamb's Blog から) を使用して、2 つの構成のビルドを実行しています
- 1つは「リリース」用
- 「デバッグ」の 2 番目
コントローラーに 2 つのエージェントがあります。このビルドを実行するたびに、コントローラーから使用可能なエージェントが選択され、2 つのビルドのエージェントがランダムに選択されます。エージェント 1 で「リリース」を実行し、エージェント 2 で「デバッグ」を実行することもあれば、エージェント 1 で「デバッグ」を実行し、エージェント 2 で「リリース」を実行することもあります。
この活動をコントロールしたい。
2 つの構成に対して特定のエージェントを選択する方法はありますか...??? たとえば.... 2つのエージェント(エージェント1とエージェント2)を持つコントローラー(コントローラー1)があるとします。
「リリース」構成用にエージェント 1 を選択し、「デバッグ」構成用にエージェント 2 を選択したいと考えています。
maven - maven -T オプションの使用中にモジュールごとに個別のログ ファイルを取得する方法
私のプロジェクト構造は次のとおりです。
3 つの独立したコンポーネントがあります。Maven スレッド オプションを使用して、それらを並行して構築していますmvn -T 4C install | tee log.txt。
親pomディレクトリで上記のコマンドを発行すると、3つのコンポーネントすべてが並行して構築されますが、最終的にすべてのコンポーネントのログが1つのファイルにランダムな順序で取得され、エラーが発生した場合のデバッグが困難になります.コンポーネントの数は、将来的に増加する予定です。
この場合、各コンポーネントのログを個別に取得する方法はありますか?