diff --git a/package.json b/package.json index 4f3dc3f0..73ea8766 100644 --- a/package.json +++ b/package.json @@ -48,6 +48,15 @@ "light": "images/light/icon-add.svg" } }, + { + "command": "java.project.maven.addDependency", + "title": "%contributes.commands.java.project.maven.addDependency%", + "category": "Java", + "icon": { + "dark": "images/dark/icon-add.svg", + "light": "images/light/icon-add.svg" + } + }, { "command": "java.project.removeLibrary", "title": "%contributes.commands.java.project.removeLibrary%", @@ -176,6 +185,14 @@ "command": "java.view.package.copyRelativeFilePath", "when": "never" }, + { + "command": "java.project.addLibraries", + "when": "never" + }, + { + "command": "java.project.maven.addDependency", + "when": "never" + }, { "command": "java.project.removeLibrary", "when": "never" @@ -242,6 +259,11 @@ "command": "java.project.refreshLibraries", "when": "view == javaDependencyExplorer && viewItem =~ /java:container\/referenced-libraries$/", "group": "inline@1" + }, + { + "command": "java.project.maven.addDependency", + "when": "view == javaDependencyExplorer && viewItem =~ /container\/maven-dependencies/", + "group": "inline@0" } ] }, diff --git a/package.nls.json b/package.nls.json index b2b20182..a77d1af7 100644 --- a/package.nls.json +++ b/package.nls.json @@ -2,6 +2,7 @@ "description": "Manage Java Dependencies in VSCode", "contributes.commands.java.project.create": "Create Java Project", "contributes.commands.java.project.addLibraries": "Add a jar file or a folder to project classpath", + "contributes.commands.java.project.maven.addDependency": "Add a new dependency to the Maven project", "contributes.commands.java.project.removeLibrary": "Remove jar file from project classpath", "contributes.commands.java.view.package.refresh": "Refresh", "contributes.commands.java.view.package.changeRepresentation": "Change package representation", diff --git a/package.nls.zh.json b/package.nls.zh.json index 65b85944..dd06541f 100644 --- a/package.nls.zh.json +++ b/package.nls.zh.json @@ -2,6 +2,7 @@ "description": "在 VSCode 中管理 Java 依赖项", "contributes.commands.java.project.create": "创建 Java 项目", "contributes.commands.java.project.addLibraries": "将一个 Jar 文件或一个目录添加到 Java 项目类路径中", + "contributes.commands.java.project.maven.addDependency": "为该 Maven 项目增加依赖库", "contributes.commands.java.project.removeLibrary": "将该 Jar 文件从 Java 项目类路径中移除", "contributes.commands.java.view.package.refresh": "刷新", "contributes.commands.java.view.package.changeRepresentation": "更改包展示形式", diff --git a/src/commands.ts b/src/commands.ts index 877c584b..d44ea4d4 100644 --- a/src/commands.ts +++ b/src/commands.ts @@ -38,6 +38,8 @@ export namespace Commands { export const JAVA_PROJECT_REFRESH_LIBRARIES = "java.project.refreshLibraries"; + export const JAVA_MAVEN_PROJECT_ADD_DEPENDENCY = "java.project.maven.addDependency"; + export const JAVA_PROJECT_LIST = "java.project.list"; export const JAVA_PROJECT_REFRESH_LIB_SERVER = "java.project.refreshLib"; diff --git a/src/controllers/libraryController.ts b/src/controllers/libraryController.ts index 6ce14297..52e06fe9 100644 --- a/src/controllers/libraryController.ts +++ b/src/controllers/libraryController.ts @@ -5,12 +5,13 @@ import * as fse from "fs-extra"; import * as _ from "lodash"; import * as minimatch from "minimatch"; import * as path from "path"; -import { Disposable, ExtensionContext, Uri, window, workspace, WorkspaceFolder } from "vscode"; +import { commands, Disposable, ExtensionContext, Uri, window, workspace, WorkspaceFolder } from "vscode"; import { instrumentOperationAsVsCodeCommand } from "vscode-extension-telemetry-wrapper"; import { Commands } from "../commands"; import { Jdtls } from "../java/jdtls"; import { Settings } from "../settings"; import { Utility } from "../utility"; +import { ContainerNode } from "../views/containerNode"; import { DataNode } from "../views/dataNode"; export class LibraryController implements Disposable { @@ -24,6 +25,8 @@ export class LibraryController implements Disposable { this.removeLibrary(Uri.parse(node.uri).fsPath)), instrumentOperationAsVsCodeCommand(Commands.JAVA_PROJECT_REFRESH_LIBRARIES, () => this.refreshLibraries()), + instrumentOperationAsVsCodeCommand(Commands.JAVA_MAVEN_PROJECT_ADD_DEPENDENCY, (node: ContainerNode) => + this.addMavenDependency(node)), ); } @@ -31,6 +34,15 @@ export class LibraryController implements Disposable { this.disposable.dispose(); } + public async addMavenDependency(node: ContainerNode) { + const pomPath: string = path.join(node.projectBasePath, "pom.xml"); + if (await fse.pathExists(pomPath)) { + commands.executeCommand("maven.project.addDependency", { pomPath }); + } else { + commands.executeCommand("maven.project.addDependency"); + } + } + public async addLibraries(libraryGlobs?: string[]) { if (!libraryGlobs) { libraryGlobs = []; diff --git a/src/views/containerNode.ts b/src/views/containerNode.ts index 39c43257..27839527 100644 --- a/src/views/containerNode.ts +++ b/src/views/containerNode.ts @@ -1,6 +1,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. +import { Uri } from "vscode"; import { Jdtls } from "../java/jdtls"; import { INodeData, NodeKind } from "../java/nodeData"; import { DataNode } from "./dataNode"; @@ -13,6 +14,10 @@ export class ContainerNode extends DataNode { super(nodeData, parent); } + public get projectBasePath() { + return Uri.parse(this._project.uri).fsPath; + } + protected loadData(): Thenable { return Jdtls.getPackageData({ kind: NodeKind.Container, projectUri: this._project.uri, path: this.path }); }