java 应用程序的版本由什么控制?

What controls the version of a java application?

我想我所说的“控制”指的是几件事。

基本上,我在 java 应用程序的早期为我的案例研究而苦苦挣扎,使用 Eclipse 正确配置所有内容使其没有错误,然后 运行,最后我明白了通过一些 POM 设置和 maven> 更新项目,没有任何问题。然后我下载了我们整个队列的案例研究,我在大多数项目中遇到了很多类似的错误(Eclipse 中的红色 X),看起来如果我一个一个地检查它们并配置版本等等,它们就可以工作.

所以我对 Java/Eclipse 错误及其与 Maven 和 JRE 版本的关系的理解有点模糊,但这是我的工作模型(在某些部分可能是错误的):

Java 的每个版本都添加了新功能(很明显),Java 1.8 是一个重要的里程碑,但在大多数情况下,对于大多数这些项目,您似乎可以挑选无论你喜欢什么版本,只要你正确配置你的项目设置。基本上是经销商的选择(?)。如果您在命令行中编译,这些东西可能不适用或可能作为参数传递。

但是要正确配置你的项目,我想你可以进入构建路径并那样做(?),但首选方法是让 maven 处理依赖项,包括核心 Java 运行时库依赖项(语言版本本身),您可以通过在 pom.xml 中设置 属性 (可能存在也可能不存在。这是可选的,但我认为推荐)来实现。然后(当你maven>“更新项目”时),它同步并覆盖默认值,它是系统或IDE默认值导致了初始冲突。 (?)。我理解正确吗?

并且 maven/Eclipse 知道比构建路径更尊重 Maven 或它替换构建路径,因为它明白它想要一个配置真实的多合一来源?

并且指定了错误的 java 版本,即使它是密切相关的版本,如 11 和 13,也会使您的代码看起来像是有大量错误。它甚至找不到常见的 class 字符串,因为它们在技术上是不同的,因为这正是 Java 配置它的方式,可能与其他语言不同。

当您将项目导入 IDE(例如 Eclipse)时,Eclipse 会根据您的 IDE 设置或您下载的内容或其他内容为您提供默认的 JRE 版本,但是项目可能需要一个不同的版本(为什么或为什么,我不确定,但这似乎是这种情况,是什么抛出错误或使 Eclipse 抛出错误)。然而,如果我通过右键单击更新 Maven 项目,它不一定能解决问题。我的理解是因为 pom 文件不够完整,缺少理想情况下应该存在的属性,出于这个原因:例如来源、目标和发布

我有一个项目抛出错误,当我更改时这些错误似乎消失了

<plugin>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.8.1</version>
    <configuration>
        <release>15</release>
    </configuration>
</plugin> 

<plugin>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.8.1</version>
    <configuration>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
        <release>11</release>
    </configuration>
</plugin> 

添加源和目标并将版本更改为 11。

它可能在 15 时工作,但我不记得曾经下载过 15,而且我不确定它是否必须在我的系统上或者 maven 是否下载了它。

也许 Eclipse 尖叫说源与发行版不匹配,因为我的系统上没有 15。我的案例研究有 11 个,所以这就是我选择它的原因,尽管我认为我的系统上有 14 个。有太多动人的片段,但这就是我想一劳永逸地弄清楚的-发生了什么。

Target 和 release 好像是同一个概念,可能是重复的。也许他们正在指示编译器或 IDE 达到相同的目的。源似乎不必与目标匹配,否则他们不会给我们这个选项。

我想弄清楚为什么我出错了。

让我感到困惑的是,似乎导入的项目足够了解 Eclipse Java 版本是错误的,但是当我更新 maven 项目时,它还不足以更新到正确的版本。我们是员工学生,接受了长期的带薪培训,所以我们不能指望什么都知道,但这是因为作为项目一部分的 pom.xml 配置文件不是最佳且不完整的吗本身需要我必须做的额外配置,或者它们很好并且问题出在我这边?有趣的是,系统似乎知道的足以知道事情是错误的(错误的版本),但还不足以知道如何改正(或者至少没有给出命令)。

但是,如果我随机选择一个合适的版本 (11) 并将其放入 pom 的一些属性中,(target, release) 和更新,那么它似乎可以工作。它会覆盖 Eclipse 默认值、先前的 pom 项目默认值(如果有的话),无论它来自何处或从中推断出来,并且我的新(伪随机)版本成为真相的来源并且它很高兴,而不是它需要一个特定的版本,但它只需要有人明确说明固定版本。从这个意义上讲,没有什么 'controls' 必须使用哪个版本。只要您的基本代码功能受支持(而且它们可能受支持),您只需在正确的位置断言它即可。

不知道我理解的对不对。我一直在努力应对许多活动部件。我认为这将是一个很好的学习机会,可以弄清楚语言的这一方面或取得进步。我认为 Eclipse 和 maven 正在隐式地做很多我不知道的事情,我需要这样做,或者有一些我不完全理解的设置正在被阅读,你不知道需要什么只是通过使用逻辑,因为隐含性,而且 Java 很有趣并且对其语言版本更严格,因为 v 11 中的字符串与 v 12 中的字符串 class 不同,如果我没看错的话。

知道我的思维是如何运作的,喜欢解构移动的部分,看看它是如何工作的,并机械地适应引擎盖,如果有人对这个话题有任何好的阅读 material,我也很感激.我喜欢编码。我不一定喜欢配置,尤其是当我不知道我在配置什么以及为什么配置时。

注意以下几点:

  • 安装的 JDK 和目标 Java 版本之间存在差异。安装的 JDK 需要至少与目标 Java 版本一样高。
  • 目前唯一相关的 Java 版本是 8、11 和 16。所有其他版本都已过时,不应使用。
  • 基本 类 作为“字符串”不会从一个版本更改到另一个版本,但 Eclipse 往往会显示奇怪的错误。
  • 真相总是在命令行。如果你想找到真正的错误,运行 mvn clean verify。 Eclipse 中的错误可能具有误导性或只是垃圾。