2013-03-14 314 views
2

我一直在教自己的Java,但我只使用Eclipse作爲編譯和運行我的項目的方法,並希望看到我將如何編譯和僅使用命令行運行以下文件結構(不想僅從eclipse中導出.jar文件)。如何編譯和運行多個包或源文件的Java代碼

文件結構如下:

src/ 
    model/ 
     file1.java 
     file2.java 
    app/ 
     main.java (contains main method) 
     file3.java 
     images/ 
      1.gif 
      2.gif 
    view/ 
     file4.java 
     file5.java 

我需要在編譯以及圖像文件,爲我所用他們幾件事情。我知道javac命令應該用於構建.class文件,但是我對將要使用此文件結構(和圖像文件)編譯(並運行)的人感到困惑。任何幫助,將不勝感激。

注:我試圖在Ubuntu 12.04上編譯和運行,並嚴格試圖使用命令行。

+2

使用ant或更好的maven。 – user1050755 2013-03-14 05:46:36

+0

編譯包含主要方法的類 – Shurmajee 2013-03-14 05:48:44

+1

正如'user1050755'所說,如果你不僅僅想看到非常微不足道的玩具示例,還是值得探索'ant'或'maven'。 Maven的學習速度更快,但如果您參與一個真正的項目,並借鑑第三方庫,將會帶來巨大的收益。如果你有非常簡單的要求,你應該直接使用'ant'來試圖使用javac。 (我相信你仍然會喜歡你的問題的答案,但很快你就可以踏上新的臺階......) – 2013-03-14 05:54:23

回答

3

請嘗試以下

javac -classpath ./lib/*.jar ./src/*/*.java 

給適當的jar庫路徑,如果你的java類使用3D黨庫。最好使用具有適當目錄結構的構建工具。

+0

好的,所以類文件將在每個文件夾中生成。我將如何使用散佈的類文件來運行此程序? – Tesla 2013-03-14 05:57:25

+0

@Tesla如果您的主類是'com.tesla.SomeClass',那麼您運行java'com.tesla.SomeClass',並且java會希望在'com/tesla/SomeClass.class'中找到它。文件*應該分散在不同的文件夾中,因爲Java使用它來確定它們的包。 – 2013-03-14 06:05:18

+0

這是完美的。我覺得我太困惑自己了。多謝你們。 – Tesla 2013-03-14 06:12:04

0

可以說

javac src/*/*.java 

但是,這將無條件重新編譯,將惱人的更多的文件,當你有比在命令行中更多的文件可以解決將打破。

明智的是使用AntMaven(Maven在大多數情況下更容易/更好)。您編寫構建腳本(分別爲build.xmlpom.xml)並運行構建器(antmvn)。

0

曾幾何時,我用Windows批處理文件編譯Java項目。我記得當我爲這個項目添加一個新的軟件包時,必須回頭努力編輯它們。

對Linux shell的力量,你其實可以做一個像樣的命令行構建腳本,而不必這樣做:

#!/bin/bash 

set -e   # quit on error 
set -u   # quit if we attempt to use undefined environment variable 
set -x   # show commands as they're executed (remove this line if done debugging) 

# Run this script from the project root directory 

cd src 

# Create directory structure 
find . -type d | xargs -n 1 -I I --verbose mkdir -p ../dist/class/I 

# Use javac to compile files 
find . -name "*.java" | javac @/dev/stdin -d ../dist/class 

# Copy assets 
find . -type f -and -not -name "*.java" | xargs -n 1 -I I --verbose cp I ../dist/class/I 

# Jar command 
jar cvf ../dist/$(basename $(readlink -f ..)) -C ../dist/class . 

您應該保存在一個名爲「build.sh」文件你的項目的根目錄。該腳本缺少一些功能。有很多冗長的東西,所以你可以看到究竟發生了什麼。它不處理空格或其他奇怪字符的文件名。如果你想要一個可運行的jar文件,你必須編寫一個清單文件並將其包含在「jar」命令中。如果您的項目使用Java類庫之外的任何外部依賴項,則必須將-cp開關添加到javac命令行,或者導出CLASSPATH環境變量。

上面的腳本會將資產複製到jar文件中。假設您在運行時提取資產,這將產生一個文件分發。 Stackoverflow可以告訴你更多關於How to Handle Assets in Single File within a Virtual File System in Java

作爲一種替代方法,您可以簡單地將資源從源目錄複製到目標目錄。

就風格而言,大多數人將他們的資產放在與源代碼不同的目錄中。例如。您的兩個.gif文件將位於assets/app/images而不是src/app/images。只要你能說服你的構建系統去做你想做的事情,但是我看到的大多數項目將它們分離出來,這在技術上沒有必要這樣做。