【问题标题】:How to build a solution with 2 main class (with only one running at one time) calling to one global java file如何使用 2 个主类(一次只运行一个)调用一个全局 Java 文件来构建解决方案
【发布时间】:2016-07-27 16:15:13
【问题描述】:

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

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

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

希望就构建此解决方案的最佳方式提供建议,以便用户可以随意运行A.javaB.java,同时调用全局C.java

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

【问题讨论】:

  • 您可以为具体问题提供更多背景信息吗?
  • 您应该让AB 将自己注入C 或使用C 注册回调。

标签: java jar build


【解决方案1】:

我发现最简洁的方法之一是创建一对可执行 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>

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-29
      • 1970-01-01
      • 1970-01-01
      • 2012-08-31
      • 1970-01-01
      相关资源
      最近更新 更多