[英]VSCode: how to share .java files between projects
我是 Java 的新手,所以可能會遺漏這里顯而易見的內容。
我想從項目“外部”的文件夾中提取.java
文件(不是jars
)。 我正在同時開發 MainProject 和 Shared java 文件。 稍后我想在另一個項目中使用共享文件(很可能也作為.java
文件,因為另一個項目將與第一個相關 - 即更多並發開發。;-)
我不知道如何使用.java
中 SharedJava 文件夾中的 .java 文件。 我已經嘗試過 SO 等中的建議,但無濟於事。
我已經用這樣的文件夾設置了一個新項目:
我在兩個文件夾中創建了 VSCode Java 項目,盡管對於SharedJava
我沒有包含任何構建工具。 也許這是一個問題?
這兩個項目都出現在 VSCode 的 JAVA PROJECTS 部分。
展開后,如下所示,作為初始測試,突出顯示的 java 文件是我想導入到 MainProject 中的文件。
SharedClass.java 文件:
package messaging;
public class SharedClass {
public void echoMessage(String msg) {
System.out.println("SharedClass.echoMessage() said: " + msg);
}
}
我要為我的測試做的是在這個 MainProject App.java 文件中:
package com.flowt;
public class App {
public static void main( String[] args ) {
System.out.println( "Hello World!" );
// How to import SharedClass ?
SharedClass sharedClass = new SharedClass();
sharedClass.echoMessage("Hello XYZ");
}
}
我的MainProject.code-workspace
文件是這樣的:
{
"folders": [
{
"path": "."
},
{
"path": "../SharedJava/flowtshared"
}
],
"settings": {
"java.project.sourcePaths": [
"src",
"../SharedJava/flowtshared/src"
]
}
}
那么,我需要做什么才能將SharedClass.java
導入 MainProject? (不創建符號鏈接!)
謝謝,默里
行。 得到它的工作。
首先:我找到的理解 Maven 的最佳解釋(包括多模塊項目的一個很好的例子)在這里: https://books.sonatype.com/mvnex-book/reference/index.html
它已經很舊了,示例代碼將無法運行,因為它引用了不再存在的 API。 但是,解釋非常清楚,示例代碼文件仍然存在作為參考。
也許如果您知道更多同樣好的最新參考資料,您可以在下面發表評論。
對於其他 Java 新手,我提供以下...
最終結果部分是使用 VSCode 功能完成的,部分是手工定制的。 如果我能更好地理解 VSCode java 擴展,也許我可以使用這些擴展來完成這一切。
簡短版本如下,生成的文件和文件夾等進一步顯示。
parent
級創建一個新的 Java 項目。 使用 Maven 快速啟動原型。 對於這個示例,我只使用了所有默認值,除了我的 groupId 等。
保留pom.xml
文件並刪除 rest。
按照下面的示例將<packaging>pom</packaging>
添加到pom.xml
文件。
在parent
項目中,使用與父項目相同的 groupId 創建shared
項目。 當詢問時,將項目添加到工作區。 如果需要,請刪除App.java
文件。
在shared
的 pom.xml 中,我刪除了<groupId>
部分。 請注意,Maven 包含<parent>
塊。
在parent
項目中,使用與父項目相同的 groupId 創建mainapp
項目。 當詢問時,將項目添加到工作區。
在mainapp
pom.xml 中,我刪除了<groupId>
部分。 請注意,Maven 包含<parent>
塊。
在mainapp
pom.xml 中,為shared
項目添加一個<dependency>
塊,如下例所示。
如果你 go 回到parent
項目的pom.xml
,並滾動到最后,你應該看到 VSCode 添加了一個這樣的塊:
<modules>
<module>shared</module>
<module>mainapp</module>
</modules>
您可以將其移至頂部以使其更顯眼。
shared
項目的自己的文件夾中(例如消息傳遞)。mainapp
App.java
文件以包含您共享的 class。mvn clean install
。 這會將 jars 添加到本地 Maven 存儲庫(本地存儲庫的位置與終端輸出中打印的一樣)。此時,我發現我需要關閉並重新打開 VSCode window,以便 Java 項目部分自行整理,3 個項目出現在那里。 如果我不這樣做,我會得到“類路徑”錯誤。
然后,我可以通過打開App.java
文件並使用 VSCode Run java
來進行測試。 終端顯示:
Hello World!
PrintMessage.echoMessage() echoed: I was called from Main app
我注意到如果我編輯PrintMessage.java
文件(例如更改 output 消息),我可以運行App.java
文件而無需重新編譯,並且會顯示更改。 涼爽的。
==== 代碼示例 ====
(為清楚起見,我刪除了src/test
和target
文件夾)
parent
pom.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<name>The Parent project for my test multi modules</name>
<groupId>com.flowt.multitest</groupId>
<artifactId>parent</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
<module>shared</module>
<module>mainapp</module>
</modules>
<dependencies>
<!-- The rest of this file is as normal ... -->
shared
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!-- Refer to the parent pom.xml -->
<parent>
<groupId>com.flowt.multitest</groupId>
<artifactId>parent</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<!--
Since we have a parent we leave this out
because it is pulled from the parent pom.xml
<groupId>com.flowt.shared</groupId>
-->
<artifactId>shared</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<!-- The rest of this file is as normal ... -->
主mainapp
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!-- Refer to the parent pom.xml -->
<parent>
<groupId>com.flowt.multitest</groupId>
<artifactId>parent</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<artifactId>mainapp</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>
1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
<dependencies>
<!-- Here you must include the shared project as a dependency -->
<dependency>
<groupId>com.flowt.multitest</groupId>
<artifactId>shared</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
<!-- The rest of this file is as normal ... -->
PrintMessage.java
package com.flowt.messaging;
public class PrintMessage {
public String echoMessage(String msg) {
return "PrintMessage.echoMessage() echoed: " + msg;
}
}
App.java
package com.flowt.app;
// This class is in the shared project: shared/src/main/java/com/flowt/messaging/PrintMessage.java
import com.flowt.messaging.PrintMessage;
/**
* Hello world!
*/
public class App {
public static void main( String[] args ) {
System.out.println( "Hello World!" );
// The shared class
PrintMessage printMessage= new PrintMessage();
String echo = printMessage.echoMessage("I was called from Main app");
System.out.println(echo);
}
}
我希望能有所幫助,歡迎任何有關構建應用程序的專家建議。
Go 嗯,默里
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.