2016-07-27 16 views
-1

良い日、 次のシナリオではソリューションを構築するための最善の方法についてアドバイスが必要です。1つのグローバルJavaファイルを呼び出す2つのメインクラス(1つしか実行しない)を使用してソリューションを構築する方法

a)1つのプロジェクトでは、2つのメインクラスファイルA.javaB.javaがあります。別のファイル
C.javaがあり、それぞれA.javaまたはB.javaで呼び出されます。任意の には、A.javaまたはB.javaしか実行できません。 C.javaには、実行中のファイルに応じて、値がA.javaまたはB.javaになる関数が含まれています。 C.javaA.javaが実行されている場合B)例えば、それはバックA.javaにいくつかの値を渡すC.javaに呼び出す

A.java

B.java両方にグローバルファイルとみなすことができます。ありがとうグローバルC.java

に呼び出し中

希望

は、ユーザーが自由に A.javaまたは B.javaを実行するかように、このソリューションを構築するための最良の方法であるかについてのアドバイスを持っています。より多くの情報が必要な場合は、私にお知らせください。

+0

特定の質問に追加できるコンテキストはありますか? –

+0

'A'や' B'を 'C'に注入するか、' C'でコールバックを登録するべきです。 – bradimus

答えて

0

これを行う最もクリーンな方法の1つは、どのクラスがメインクラスであるかを明示するマニフェストを持つ実行可能なjarのペアを作成することです。 antを使用すると、ビルド 'a'と 'b'の2つのターゲットを指定することができます。以下の完全な例では、ここで重要な点は、マニフェストのメインとアンを持つことによって、実行可能な2つの実行可能ファイルを作成することです。非常に効率的なサイズではありませんが、あなたがしたいことをするための非常に明白な方法です。

<project name="a_or_b" basedir="." default="main"> 

    <property name="src.dir"  value="src"/> 

    <property name="build.dir" value="build"/> 
    <property name="classes.dir" value="${build.dir}/classes"/> 
    <property name="jar.dir"  value="${build.dir}/jar"/> 

    <property name="deploy.dir"  value="bin"/> 

    <property name="main-class-a" value="package.a.mainclass"/> 
    <property name="main-class-b" value="package.b.mainclass"/> 


    <target name="clean"> 
     <delete dir="${build.dir}"/> 
     <delete dir="${deploy.dir}"/> 
    </target> 

    <target name="compile"> 
     <mkdir dir="${classes.dir}"/> 
     <javac srcdir="${src.dir}" debug="on" destdir="${classes.dir}"/> 
    </target> 

    <target name="jar-a" depends="compile"> 
     <mkdir dir="${jar.dir}"/> 
     <jar destfile="${jar.dir}/${ant.project.name}-a.jar" basedir="${classes.dir}"> 
      <manifest> 
       <attribute name="Main-Class" value="${main-class-a}"/> 
      </manifest> 
     </jar> 
    </target> 

    <target name="jar-b" depends="compile"> 
     <mkdir dir="${jar.dir}"/> 
     <jar destfile="${jar.dir}/${ant.project.name}-b.jar" basedir="${classes.dir}"> 
      <manifest> 
       <attribute name="Main-Class" value="${main-class-b}"/> 
      </manifest> 
     </jar> 
    </target> 

    <target name="jar" depends="jar-a,jar-b"/> 

    <target name="deploy" depends="clean,jar"> 
     <mkdir dir="${deploy.dir}"/> 
     <copy todir="${deploy.dir}"> 
     <fileset dir="${jar.dir}"/> 
    </copy> 
    </target> 

    <target name="main" depends="clean,jar,deploy"/> 

</project> 
0

プロジェクト内に唯一のメインメソッドを含む新しいクラスMain.javaを作成します。メインメソッドをA.javaB.javaから削除します。 Main.javaは、コマンドライン引数に基づいてA.javaまたはのいずれかを呼び出します。ユーザーはコマンドラインから実行するものを扱うことができます。

関連する問題