如何使用两个主类(一次只运行一个)调用一个全局java文件来构建解决方案

如何使用两个主类(一次只运行一个)调用一个全局java文件来构建解决方案,java,jar,build,Java,Jar,Build,大家好, 我需要关于为以下场景构建解决方案的最佳方法的建议 a) 在一个项目中,我有两个主要类文件,a.java和B.java。还有另一个文件, C.java,分别由A.java或B.java调用。无论如何 一次只能运行A.java或B.javaC.java包含一个函数,该函数将值传递给a.java或B.java,具体取决于正在执行的文件C.java可以被视为a.java和B.java b) 例如,如果执行A.java,它将调用C.java,将一些值传递回A.java 希望获得关于构建此解决方案

大家好, 我需要关于为以下场景构建解决方案的最佳方法的建议

a) 在一个项目中,我有两个主要类文件,
a.java
B.java
。还有另一个文件,
C.java
,分别由
A.java
B.java
调用。无论如何 一次只能运行
A.java
B.java
C.java
包含一个函数,该函数将值传递给
a.java
B.java
,具体取决于正在执行的文件
C.java
可以被视为
a.java
B.java

b) 例如,如果执行
A.java
,它将调用
C.java
,将一些值传递回
A.java

希望获得关于构建此解决方案的最佳方法的建议,以便用户可以在调用全局
C.java
时随意运行
a.java
B.java


多谢各位。如果需要更多信息,请随时告诉我。

我发现最干净的方法之一是创建一对可执行JAR,每个JAR都有一个清单,指定哪个类是主类。使用ant,您可以为构建指定两个目标“a”和“b”。下面是一个完整的示例,这里的关键是再次指定清单中的主要内容,并让ant构建两个可执行文件。尺寸效率不高,但做您想做的事情的方式非常明确

<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>


创建一个新类
Main.java
,该类将包含项目中唯一的Main方法。从
A.java
B.java
中删除主要方法
Main.java
将根据命令行参数调用
A.java
B.java
。用户可以处理从命令行运行哪一个。

对于特定的问题,您可以提供更多的上下文吗?您应该让
A
B
将其自身注入
C
或向
C
注册回调。