JDBC in makefile



我正试图为一个java项目编写一个makefile,如下所示。我连接了一个数据库(当我使用另一个IDE而不是javac编译时,安装并测试了它的工作情况)。我不知道如何将驱动程序写入makefile。对于下面的makefile,在键入make之后,我得到消息:包com.mysql.jdbc不存在。但我的makefile所在的文件夹中有mysql-connector-java-5.116-bin.jar。

JFLAGS = -g
JC = javac
.SUFFIXES: .java .class
.java.class:
    $(JC) $(JFLAGS) $*.java
JavaLibraries = 
      mysql-connector-java-5.1.16-bin.jar 
CLASSES = 
    DBMain.java
    Update.java
    server.java
    Client.java
default: classes
classes: $(CLASSES:.java=.class)
clean:
    $(RM) *.class

感谢您的意见。

我再怎么强调也不为过,Java和make不能很好地结合在一起。使用make构建Java项目可能会遇到严重的问题。

然而,如果您真的想使用make,尽管有所有警告,那么您必须调整Java编译器的类路径设置:

JFLAGS = -g
JC = javac
CLASSPATH=mysql-connector-java-5.1.16-bin.jar:.
.SUFFIXES: .java .class
.java.class: 
      $(JC) $(JFLAGS) -cp $(CLASSPATH) $*.java
...

因此,CLASSPATH由所有使用的JAR和*.java文件的包根目录(我认为这是当前目录)组成,在Unix/Linux系统上用冒号分隔,在Windows上用分号分隔。然后在.java.class规则中,您必须使用-cp标志调用Java编译器来传递类路径。

这个数据库模式定义语言项目包含一个示例build.xml,它展示了如何通过JDBC初始化和测试数据库。请注意,ant目标与make命令完全一样。

附录:

我需要写一个makefile供其他人使用。

另一个答案显示了直接从makefile调用javac的一个很好的例子。它展示了如何包含classpath,这可能会解决您眼前的问题;但是对于更复杂的构建(比如那些包含包的构建)来说,这种方法很快就变得笨拙起来。这可以通过使用subst功能来缓解:

PKG = com.name.util
PKG_PATH = $(subst .,/,$(PKG))

一个简单得多的方案是写一个最小的ant目标,比如<target name="compile"…>,如这里所示;则相应的CCD_ 13命令很简单:

.SUFFIXES: .java .class
.java .class: 
      ant compile

当然,makefile现在依赖于ant,但ant相当普遍。

最新更新