带有Jar和软件包依赖关系的Makefile - java

我整天都在努力使这个东西正常工作。基本上,我需要创建一个makefile以从源代码构建我的项目。我对Linux有点了解,但是对Linux却了解不多,我是一个完整的makefile新手。

我从网上尝试了许多示例,但所有人都抱怨它们缺少依赖项。其他人建议使用Ant或Mavern,但这不可能实现确切的提示通知:

引自规范

您提交的内容应包括
单个文件comp2010.tar适用于
在Linux系统上使用。这必须
包含一个文件Makefile,以及所有
资料来源。你不应该交
.class文件。您的Makefile必须建立
该工具来自Java来源。的
主班必须叫布莱斯(Blaise)。在
简而言之,(自动)测试过程
将包括:

tar xf comp2010.tar
make
java Blaise < test.file > testout 2>
testerr

这些命令将在
标准中的空目录
部门教学Linux
Java 1.6的环境。的
CLASSPATH将包含ANTLR jar,
版本3.2。

注意:请确保您的
提交可以被编译和
在标准部门执行
机器。请确保您
使用正确的Java版本,以及
您不使用绝对路径。如果
您使用任何外部库,
也需要提交这些。

因此,您看到我无法设置任何环境变量,因为运行它的机器不是我的机器,并且不允许我进行管理访问。我无法交出任何类文件,因此makefile不适合我,Ant / Mavern脚本将无法工作,因为测试过程是自动执行的,并且使用此makefile,而我只能交出.java文件。因此,我需要构建一个makefile,无法解决这个问题。

源结构如下:

src \ Package1 * .java

src \ Package2 * .java

自动生成\ PackageA * .java

编译该东西所需的所有3个文件夹中都有源文件。 Main()方法位于src \ Package1 \ 1.java中

这些目录中的每一个都是Eclipse中的一个程序包,这3个程序包相互依赖以及一个外部Jar文件antlr-3.2.jar

那么我如何制作这个makefile。这是我的问题,我在下面提供了自己的尝试:

JAVAC = javac
CLASS_FILES = src/package1/1.class auto-generated/packageA/2.class auto-generated/packageA/3.class auto-generated/packageA/4.class src/Package2/5.class src/Package2/6.class src/Package2/7.class src/Package2/8.class src/Package2/9.class src/Package2/10.class src/Package2/11.class src/Package2/12.class antlr-3.2.jar.*

Default: $(CLASS_FILES)

%.class: %.java
    $(JAVAC) $<

clean: $(RM) *.class

此操作失败,并出现诸如“org.antlr.runtime不存在”之类的错误,该错误位于antlr-3.2.jar中。我机智,需要尽快上交。我认为我只是错误地导入了jar,也许我需要使用任何CLASSPATH。对不起,如果这是一个简单的问题,但我现在已经尝试了6个小时,以便使其中一个成为可能。您能提供的任何帮助将不胜感激。

亲切的问候
费尔多

参考方案

我可以在这里看到一些问题:

如所描述的

  • ,您需要在tar文件
  • 的根目录中的默认包中设置Blaise类

  • 您使用的任何软件包都应直接存在于根目录下,而不是源子目录中(因为Java / Javac将无法在其中找到它们)
  • make是使用空格和制表符
  • 的特定WRT

  • 您的makefile不使用javac命令
  • 的选项

  • 您要为哪个版本的make构建文件?我知道的版本将采用以下格式:
    JAVAC = javac
    JAVACFLAGS =
    SRC= Blaise.java \
        package1/1.java \
        packageA/2.java
    CLS= $(SRC:.java=.class)
    
    all:  $(CLS)
    
    
    .SUFFIXES : .class .java
    .java.class :
        $(JAVAC) $(JAVACFLAGS) $<
    
  • Java:静态字段在内存中的哪个位置? - java

    如果我们将对象存储在对象的静态字段中,那么JVM如何为它分配内存?它是否存在于“隐式”(不确定我是否使用正确的单词)类对象中?静态字段与对象字段有何不同? 参考方案 静态字段是类变量,并且在该类的所有实例之间共享。实例变量(或我认为您引用它们的对象字段)属于类的各个实例,并且不共享。至于它们存储在内存中的位置将根据JVM的实现而定,因此没有理由需要两个不同的…

    Java-非泛型类扩展了泛型类 - java

    我想知道如何(如果可能)创建一个类,它是泛型类的特定类型。具体来说,我有一个实现所有必需方法的abstract class Stack<Type>,我想有一个class StackInteger,而StackInteger的实例也是Stack<Integer>的实例。我看到我可以做这样的事情:class StackInteger { …

    Java:正则表达式模式匹配器是否有大小限制? - java

    我的模式类似于OR:“word1 | word2 | word3”我大约有800个字。可能有问题吗? 参考方案 您仅受记忆和理智的限制。 :)

    Java:线程池如何将线程映射到可运行对象 - java

    试图绕过Java并发问题,并且很难理解线程池,线程以及它们正在执行的可运行“任务”之间的关系。如果我创建一个有10个线程的线程池,那么我是否必须将相同的任务传递给池中的每个线程,或者池化的线程实际上只是与任务无关的“工人无人机”可用于执行任何任务?无论哪种方式,Executor / ExecutorService如何将正确的任务分配给正确的线程? 参考方案 …

    JAVA:字节码和二进制有什么区别? - java

    java字节代码(已编译的语言,也称为目标代码)与机器代码(当前计算机的本机代码)之间有什么区别?我读过一些书,他们将字节码称为二进制指令,但我不知道为什么。 参考方案 字节码是独立于平台的,在Windows中运行的编译器编译的字节码仍将在linux / unix / mac中运行。机器代码是特定于平台的,如果在Windows x86中编译,则它将仅在Win…