2011-06-03 61 views
2

我想爲如下所示的java項目編寫一個makefile。我有一個數據庫連接(當我用另一個IDE而不是javac編譯時,安裝和測試工作)。我不知道如何將驅動程序寫入makefile。對於以下makefile,輸入make後,我得到以下消息:package com.mysql.jdbc不存在。但是我的mysql-connector-java-5.1.16-bin.jar與我的makefile文件位於同一個文件夾中。生成文件中的JDBC

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 

感謝您的任何意見。

+3

爲什麼要爲Java項目創建makefile?使用ANT或更好的MAVEN! – CoolBeans 2011-06-03 02:48:23

+1

您確實需要使用ANT或其他基於Java的make等價物。如果您在一個有多種語言的項目中,那麼您可以始終使用MAKEFILE調用ANT構建。除此之外,看看javac的語法,並確保你在類路徑中包含庫 - 在你的情況$(JC)$(JFLAGS)-classpath $(JavaLibraries) – 2011-06-03 11:05:04

回答

1

這個Database Schema Definition Language項目包含一個示例build.xml,它演示瞭如何通過JDBC初始化和測試數據庫。請注意,ant目標與make命令完全一樣。

附錄:

我需要的是寫一個makefile供他人使用。

此其它answer顯示直接從makefile調用javac的一個很好的例子。它顯示如何包含classpath,這可能會解決您的直接問題;但是這種方法對於更精細的構建(例如包裝)來說很快變得笨拙。這可以通過使用subst函數有所減輕:

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

一個簡單得多的方案是寫最小ant目標,如<target name="compile"…>,如圖here;那麼相應的make命令很簡單:

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

當然,現在makefile取決於ant,但ant是相當ubiquitous

+0

非常感謝您提出了一種替代方案,但是,我有問題中提到的替代方案,但我需要的是編寫一個makefile供其他人使用,所以我仍然需要找到如何在makefile中執行它,並且在網上看起來不那麼容易。如果你能告訴我如何在makefile中編寫它,請提前致謝:)。 – txs 2011-06-03 05:41:22

2

我不能強調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編譯器來傳遞類路徑。

+0

+1阿門!雖然這可行,但對於軟件包等,它很快就變得很笨拙。 – trashgod 2011-06-03 17:15:22