簡體   English   中英

從 linux 命令行編譯 java 項目

[英]Compiling a java project from linux command line

我無法理解如何實際使用命令行來運行大型 java 項目(我的意思是多個文件和文件夾)。

想象一下,我有一個項目包含:

~/src/main/fr/file1.java
~/src/main/fr/file2.java

~/src/test/test1.java

我這輩子的人都為我做了 makefile。 我只是用 vim 編碼 java src 並用make編譯和運行。 現在沒有 makefile。 我用 maven 編譯(我仍然理解它是如何工作的。)。 用 maven 編譯后(我只是運行 maven 編譯)。 然后我有一個名為 target 的新文件夾。

~/target/main/fr/file1.class
~/target/main/fr/file2.class


~/target/test/test1.class

現在我該如何運行test1 我嘗試使用java -classpath =... test1但我總是收到錯誤...

如果有人可以幫助我(或者只是給我一些資源,以便我最終能夠理解基本的項目結構和腳本),那就太棒了。 謝謝 !

這是一個最小的工作示例,用於從多個位置編譯 java 源文件並將它們打包到一個可運行的 jar 中。

$ tree
.
├── makefile
├── src_folder_1
│   └── Main.java
└── src_folder_2
    └── Person.java

為了完整起見,java 文件的內容出現在最后。 這是 makefile。

BIN_DIR = bin
WITH_DEBUG_INFO = -g

.DEFAULT_GOAL:
app.jar:

compile_phase.done: ${SRC_FILES}
    @mkdir -p ${BIN_DIR}
    @javac ${WITH_DEBUG_INFO} ${SRC_FILES} -d ${BIN_DIR}
    @echo "DONE" >> $@

manifest.mf:
    @echo "Class-Path: ${BIN_DIR}/*.class\nMain-Class: Main\n" > $@

app.jar: manifest.mf compile_phase.done
    @jar cfm $@ $< -C ${BIN_DIR} .
    @rm -rf ${BIN_DIR}
    @rm $^

看到所有的 java 源文件都在同一個規則內編譯,對應的*.class文件放在專用的bin目錄下。 為了強調運行 jar 所需的一切都在其中,我完全刪除了bin目錄和manifest.mf 現在你可以運行程序

$ java -jar app.jar oren
Hello oren

為了完整起見,這里是 java 文件:

$ cat src_folder_1/Main.java 
class Main {
    static public void main(String[] args) {
        Person p = new Person(args[0]);
        System.out.format("Hello %s\n",p.toString()); }}
$ cat src_folder_2/Person.java 
class Person {
    private String name;
    public Person(String n) { this.name = n;}
    public String toString() { return name; }}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM