在基于 Visual Studio Code Maven 的 Java 项目中设置类路径

Posted

技术标签:

【中文标题】在基于 Visual Studio Code Maven 的 Java 项目中设置类路径【英文标题】:Setting the classpath in a Visual Studio Code Maven-based Java project 【发布时间】:2018-11-17 20:24:47 【问题描述】:

我正在尝试在 CentOS 7 上使用 Visual Studio Code 来运行/调试来自第三方供应商的现有 Hello World Java 项目。我对 Java 比较陌生,所以也许我缺少一些明显的东西。

我已经使用here 描述的扩展设置了 Visual Studio Code。我还设置了 Apache Maven,并且能够在 Visual Studio Code 中创建一个新的 Maven Java 项目,该项目可以编译并且可以调试。现在我想获取第三方供应商的 Hello World 示例(不使用 Maven)并将其合并到工作中的 Maven 示例中。

我能够从命令行编译和运行第三方供应商的原始 Hello World 应用程序。当我从命令行构建它时,我需要运行一个包含以下内容的build.sh 脚本:

 #!/bin/sh
 "$JDK/bin/javac" -classpath ".:..:../../../Inc/Java/com.abbyy.FREngine.jar" \ Hello.java

当我将原始 Java 代码复制并粘贴到 Maven 项目的主 Java 文件中时,这一行...

 import.com.abbyy.FREngine.*;

...尝试编译时显示“无法解析导入 com.abbyy”错误,这是可以理解的。

看来我需要在我的项目中的某个地方设置类路径......但我不知道在哪里。是的,我的项目中有一个“.classpath”文件,但是这些信息应该放在哪里并不明显......或者它是否应该放在那个文件中。

有什么建议吗?

【问题讨论】:

使用 mvn install:file 添加该 jar。请参阅 Maven Guide to installing 3rd party JARs 并修改 pom.xml 以包含您的本地 3rd-party jar。 【参考方案1】:

我没有在在线 maven 存储库中找到这个 jar。这意味着如果不将 jar 上传到本地 maven 存储库中,您就无法将此 jar 作为依赖项添加到 pom.xml 中。

以下是从https://forum.ocrsdk.com/thread/5116-frengine-11-maven-is-not-supported/挑选的解决方案

首先,您需要使用 将 jar 上传到您的 maven 存储库中

mvn install:install-file -Dpackaging=jar -DgeneratePom=true -Dclassifier=win -DgroupId=com.abbyy.FREngine -DartifactId=com.abbyy.FREngine.jar -Dversion=11 -Dfile=local_path_to_the_jar_file

然后你可以在你的 pom.xml 中使用依赖:

<dependency>
 <groupId>com.abbyy.FREngine</groupId>
 <artifactId>com.abbyy.FREngine.jar</artifactId>
 <version>11</version>
 <classifier>$os.prefix</classifier>
</dependency>

解决方案中使用的“分类器”是必需的,因为您使用的 jar 似乎嵌入了一些本机编译代码(dll 或 so 文件)。您需要检查您的 jar 是否嵌入了 .dll 或 .so 文件或两者都嵌入

【讨论】:

感谢您的提示。不过,我被困在第一步,将 jar 上传到 Maven 存储库中。似乎 jar 文件本身没有版本号,因此 Maven 抱怨 "The artifact information is incomplete or not valid: [0] 'version' is missing" - DVersion 设置为什么并不重要。当我运行unzip -p com.abbyy.FREngine.jar META-INF/MANIFEST.MF 时,我得到以下信息:Manifest-Version:1.0 Created-By: 1.7.0_80 (Oracle Corporation) 我的理解是版本号实际上是Implementation-Version,这个jar 文件没有。 我已经使用示例 jar 文件测试了该命令,它运行良好。您需要提供的版本参数是与清单文件中的任何值没有任何关系的任意数字/字符串。你能分享产生错误信息的命令吗?【参考方案2】:

我能够通过将此条目添加到 .classpath 文件来解决我的问题:

 <classpathentry kind="lib" path="/opt/ABBYY/FREngine12/Inc/Java/com.abbyy.FREngine.jar" />

【讨论】:

我知道这是一岁了,但是谢谢!!刚开始使用 VS Code for Java 并无法弄清楚这一点。 (我对 Maven 没有经验。)

以上是关于在基于 Visual Studio Code Maven 的 Java 项目中设置类路径的主要内容,如果未能解决你的问题,请参考以下文章

基于Visual Studio Code搭建Vue开发环境

visual studio code怎么新建vue工程

visual studio code新手入门

如何在 Visual Studio Code 中运行 JavaScript 代码? [复制]

CA周记 - 用 Visual Studio Code 做基于 .NET MAUI 跨平台移动应用开发

是否可以在 Visual Studio Code 扩展中访问鼠标事件