TeamCity オンプレミス 2025.11 ヘルプ

重複ファインダー (Java)

重複ファインダー (Java) ビルドランナーは、類似したコードフラグメントをキャッチし、検出された Java コードの繰り返しブロックに関するレポートを提供することを目的としています。このランナーは IntelliJ IDEA 機能に基づいているため、ランナーを構成するには IntelliJ IDEA プロジェクトファイル (.ipr) またはディレクトリ (.idea) が必要です。

バンドルバージョンに加えて、JetBrains IntelliJ インスペクションおよび DuplicatesEngine の別のバージョンをインストールしたり、管理 | ツールページを使用してデフォルトを変更したりすることができます。

重複ファインダー(Java)ランナーは、Maven2 以降でビルドされたプロジェクトで Java の重複を見つけることもできます。

このページには、次の重複ファインダー(Java)ビルドランナーのフィールドに関する参照情報が含まれています。

IntelliJ IDEA プロジェクト設定

オプション

説明

プロジェクトファイルの種類

コードで IntelliJ IDEA インスペクションを実行できるようにするには、TeamCity で IntelliJ IDEA プロジェクトファイル / ディレクトリ、Maven pom.xml または Gradle build.gradle をここで指定する必要があります。

プロジェクトへのパス

プロジェクトファイルの種類で選択したプロジェクトの種類に応じて、ここで指定します。

  • IntelliJ IDEA プロジェクト用 : プロジェクトファイルへのパス(.ipr)またはプロジェクトディレクトリへのパス(.idea ディレクトリを含むプロジェクトのルートディレクトリ)。

  • Maven プロジェクト用 : pom.xml ファイルへのパス。

  • Gradle プロジェクト用 : .gradle ファイルへのパス。

この情報は、このビルドランナーがプロジェクトの構造を理解するために必要です。

*.iml ファイルでグローバルライブラリとモジュールベースの JDK を検出する

このオプションは IntelliJ IDEA プロジェクトを使用する場合に利用できます。IntelliJ IDEA では、モジュール設定は *.iml ファイルに保存されるため、このオプションをオンにすると、保存時にすべてのモジュールファイルでグローバルライブラリとモジュール JDK への参照が自動的にスキャンされます。これにより、すべての参照が適切に解決されることが保証されます。

プロジェクトのチェック / 再解析

このオプションは IntelliJ IDEA プロジェクトを使用する場合に利用できます。このボタンをクリックすると、IntelliJ IDEA プロジェクトが再解析され、プロジェクトからビルド設定 (JDK のリストなど) が直接インポートされます。

作業ディレクトリ

ビルドチェックアウトディレクトリと異なる場合は、作業ディレクトリを構築するへのパスを入力します。

オプションで、チェックアウトディレクトリと異なる場合は指定します。

未解決のプロジェクトモジュールとパス変数

このセクションは、IntelliJ IDEA モジュールファイル(.iml)が IPR ファイルから参照された場合に表示されます。

  • 見つからない ;

  • IPR ファイルで使用されているパス変数の値を入力できます。

このセクションの値をリフレッシュするには、プロジェクトのチェック / 再解析をクリックします。

オプション

説明

<path_variable_name>

このフィールドは、プロジェクトファイルに IntelliJ IDEA 設定のパス変数ダイアログで定義されたパスマクロが含まれている場合に表示されます。値をフィールドに設定で、さまざまなビルドエージェントで使用するプロジェクトリソースへのパスを指定します。

プロジェクト JDK

このセクションでは、プロジェクトで検出された JDK のリストを示します。

オプション

説明

JDK ホーム

このフィールドを使用して、プロジェクトの JDK ホームを指定します。

JDK Jar ファイルパターン

このリンクをクリックすると、プロジェクト JDK の jar ファイルのテンプレートを定義できるテキスト領域が開きます。Ant ルールを使用して、jar ファイルパターンを定義します。Linux および Windows オペレーティングシステムでは、デフォルト値が使用されます。

jre/lib/*.jar

macOS の場合は、次の行を使用してください。

lib/*.jar ../Classes/*.jar

IDEA ホーム

プロジェクトで IDEA JDK を使用している場合は、IDEA ホームディレクトリの場所を指定します。

IDEA Jar ファイルパターン

このリンクをクリックしてテキスト領域を開き、IDEA JDK の jar ファイルのテンプレートを定義できます。

JDK

JDK を選択してください。このセクションは利用可能なオプションを詳しく述べています。デフォルトは JAVA_HOME 環境変数またはエージェント自身の Java です。

JDK ホームパス

このオプションは、上で <カスタム> を選択した場合に使用できます。このフィールドを使用して、ビルドの実行に使用するカスタム JDK へのパスを指定します。このフィールドを空白のままにすると、JDK ホームへのパスは、エージェントマシンの JAVA_HOME 環境変数から、またはビルドエージェント構成ファイル (buildAgent.properties) で指定された env.JAVA_HOME プロパティから読み取られます。これらの値が指定されていない場合、TeamCity はビルドエージェントプロセス自体の Java ホームを使用します。

JVM コマンドラインパラメーター

追加の JVM コマンドラインパラメーターを使用すると、初期および最大ヒープサイズの設定、追加のログの有効化、必要なバイトコード検証モードの選択などを行うことができます。

標準 ( - で始まる、たとえば -verbose:[class|module|gc|jni] または --dry-run) と非標準 ( -X で始まる、たとえば -Xmx<size> または -XstartOnFirstThread) の両方の JVM オプションを指定できます。

複数のコマンドラインパラメーターを指定するには、区切り文字としてスペースを使用します。例:

-verbose:gc -Xdiag -Xcomp -Xmx512m -Xms256m

Java パラメーター

重複した Finder 設定

オプション

説明

テストソース

このオプションがチェックされている場合、テストソースは重複分析に含まれます。

包含 / 除外パターン

オプションで、重複分析を実行するソーススコープを制限するように指定します。詳細については、以下のセクションを参照してください。

脱メタルレベル

これらのオプションを使用して、繰り返しコードの断片を検索するときにソースコードのどの要素を区別するかを定義します。コードフラグメントは、構造的には類似しているが、異なる変数、フィールド、メソッド、型、またはリテラルを含む場合、重複していると見なすことができます。以下のサンプルを参照してください。

変数を区別する

このオプションがチェックされていると、異なる変数名を持つ類似の内容は異なるものとして認識されます。このオプションがチェックされていない場合、そのような内容は重複していると認識されます。

public static void main(String[] args) { int i = 0; int j = 0; if (i == j) { System.out.println("sum of " + i + " and " + j + " = " + i + j); } long k = 0; long n = 0; if (k == n) { System.out.println("sum of " + k + " and " + n + " = " + k + n); } }

フィールドを区別する

このオプションがチェックされている場合、異なるフィールド名を持つ類似の内容は異なるものとして認識されます。このオプションがチェックされていない場合、そのような内容は重複していると認識されます。

myTable.addSelectionListener(new SelectionListener() { public void widgetDefaultSelected(SelectionEvent e) { } /*.....**/ }); myTree.addSelectionListener(new SelectionListener() { public void widgetDefaultSelected(SelectionEvent e) { } /*.....**/ });

方法を区別する

このオプションがチェックされている場合、類似した構造のメソッドは異なるものとして認識されます。このオプションがチェックされていない場合、そのようなメソッドは重複していると認識されます。この場合、抽出して再利用することができます。初期バージョン

public void buildCanceled(Build build, SessionData data) { /* ... **/ for (IListener listener : getListeners()) { listener.buildCanceled(build, data); } } public void buildFinished(Build build, SessionData data) { /* ... **/ for (IListener listener : getListeners()) { listener.buildFinished(build, data); } }

メソッドを区別せずにコードの重複を分析した後、重複したフラグメントを抽出できます。

public void buildCanceled(final Build build, final SessionData data) {     enumerateListeners(new Processor() {       public void process(final IListener listener) {         listener.buildCanceled(build, data);       }     });   }     public void buildFinished(final Build build, final SessionData data) {     enumerateListeners(new Processor() {       public void process(final IListener listener) {         listener.buildFinished(build, data);       }     });   }     private void enumerateListeners(Processor processor) {/*  ... **/     for (IListener listener : getListeners()) {       processor.process(listener);     }   }     private interface Processor {     void process(IListener listener);   }

種類を区別する

このオプションがチェックされている場合、異なる型名を持つ類似のコードは異なるものとして認識されます。このオプションがチェックされていない場合、そのようなコードフラグメントは重複していると認識されます。

new MyIDE().updateStatus() new TheirIDE().updateStatus()

リテラルを区別する

このオプションをオンにすると、リテラルが異なる類似のコード行は異なると見なされます。このオプションがチェックされていない場合、そのような行は重複として認識されます。

myWatchedLabel.setToolTipText("Not Logged In");
myWatchedLabel.setToolTipText("Logging In...");

以下の複雑さで重複を無視します

ソースコードの複雑さは、ステートメント、式、宣言、メソッド呼び出しの量によって定義されます。それぞれの複雑さはそのコストによって定義されます。ソースコードフラグメントのこれらすべての要素のコストをまとめると、全体的な複雑さが生じます。このフィールドを使用して、重複を検出するときに考慮するソースコードの最低レベルの複雑さを指定します。意味のある結果を得るためには、値 10 から始めてください。

以下の複雑さを持つ重複した部分式を無視します

このフィールドを使用して、重複を検出するときに考慮する副次式の最低レベルの複雑さを指定します。

部分式が抽出できるかどうかを確認

このオプションをチェックすると、重複した部分式を抽出することができます。

包含 / 除外パターンは、改行で区切られた形式の一連の規則です。

[+:|-:]pattern

パターンがこれらの規則を満たさなければならない場合:

  • ** または * のいずれかで終了する必要があります (これはパターンをディレクトリレベルだけに効果的に制限します。それらはファイルレベルパターンをサポートしません)

  • モジュールへの参照は、[module_name]/<path_within_module> として含めることができます。パターン処理に関するいくつかの注:

  • 除外は包含よりも優先されます

  • include パターンが指定されている場合、これらのパターンに一致するディレクトリだけが含まれ、その他のすべてのディレクトリは除外されます。

  • "include" パターンは特別な振る舞いをします(根本的な制限による): それは指定されたディレクトリと指定されたディレクトリの上のディレクトリに直接存在するすべてのファイルを含みます。

例:

+:testData/tables/** -:testData/** -:testdata/** -:[testData]/**
2025 年 10 月 27 日

関連ページ:

エージェントツールのインストール

TeamCity では、エージェントツールは、エージェントを構築するためのファイルをディストリビューションするためだけに使われるプラグインの一種です。エージェントツールは、ファイルのセットまたはバイナリディストリビューションになります。そのクラスはランタイムにロードされません。TeamCity を使用すると、サーバー上で追加のツールをインストール / 削除し、オンデマンドでエージェントを構築するために配布することができます。ビルドエージェントが多数ある環境では、構成ファイルのディストリビューショ...

エージェント要件の設定

エージェントの要件は、ビルド構成を実行できるエージェントを指定する条件です。現在存在するすべての要件を表示して新しい要件を作成し、特定の構成を実行できるエージェントを確認するには、ビルド設定 | エージェント要件にアクセスしてください。エージェント要件ビデオガイド:要件構文:エージェント要件は式です。ここは、定義済みまたはカスタム (ユーザー定義) のビルドパラメーターです。例: エージェントにインストールされているオペレーティングシステムを報告するパラメーター。要件では、エージェントがこの特...

dotCover

dotCover ランナーは、JetBrains dotCover を使用して .NET プロセスのカバレッジレポートを生成します。生成されたレポートは、ビルド結果ページのコードカバレッジタブに公開されます。このランナーは、複数の先行する .NET ステップの後に配置して、個々のコードカバレッジをマージし、統合レポートを公開することもできます。dotCover ステップ設定:このセクションでは、ランナー設定の使用方法について説明します。現在のタスクに応じてこれらの設定を組み合わせる方法の例については、...