【问题标题】:How does one build an application with Spring without using magic tools?如何在不使用魔术工具的情况下使用 Spring 构建应用程序?
【发布时间】:2018-09-04 10:02:20
【问题描述】:

我目前正在尝试学习如何使用 Java EE 和 Spring 创建网站。然而,看看Spring's REST tutorial,它解释如何创建项目和链接到 spring 的部分基本上给出了复制/粘贴的魔术代码,没有解释它是如何工作的,或者如果教程我将如何找到该代码块不是给我的。我看过的他们的其他教程在这方面是相似的。它有一个关于 Gradle 如何工作的基本教程,但这不足以理解魔术代码中发生了什么,因为在他们的 Rest 教程中使用了大量的新语法。

为了只使用 JDK 附带的工具(即 javac)来构建 Spring 应用程序,我必须做什么? Spring 是否有一些隐藏(可能很大)的 jar 集,我可以简单地添加为依赖项,然后提取到我的最终 jar 中,并使其工作?如果没有,我想只使用 javac 和其他 JDK-default 工具编译 Spring 应用程序,我该怎么做?

我已经尝试了各种 Google 搜索,以了解有关如何构建 Spring 应用程序的详细信息,但我能找到的只是更多的教程,比如我链接的那个给出魔法代码的教程,在那里我得到了在一个上下文中工作的东西,但是没有解释它是如何做到的,或者我如何针对不同的上下文修改它。

【问题讨论】:

  • 该问题显示没有研究。你试过什么?你看过 maven 或 gradle 之类的构建工具吗?您是否看到 Spring Boot 应用程序正在拉取哪些依赖项?您使用的是哪个版本的 Spring Boot?
  • @Prashant 在过去 3 天的大部分时间里,我一直在研究这个问题。我试图从 Spring 的文档中理解,但几乎所有的文档都包含魔术代码,并且对于我想要弄清楚的内容毫无用处。我已经研究了这两个构建工具,似乎它们在大力推动我让 spring 自动化构建,尽管我想正确理解这一事实。我还没有看到 Spring boot 引入的依赖项,因为我不知道该怎么做。我不知道我用的是什么版本,因为都是通过魔术码拉进来的。
  • 我认为这个视频教程会帮助你 :) 享受!在 JavaBrains 上构建 Spring Boot 应用程序:javabrains.thinkific.com/courses/springboot-quickstart
  • 对我来说不清楚你想要什么。您没有提出诸如“buildscript {...} 做什么?”之类的具体问题,也没有描述您所说的“魔术代码”是什么意思。您帖子的第二部分(仅使用 jdk-tools 手动设置),抓住了一个已经回答的主题:Why you should use build tools,或者只是 google for jar hell。顺便提一句。 spring 由几十个库组成,依赖于几十个外部库,只是提示你为什么不想自己管理依赖项。结果:不清楚你在第 1 部分中的要求,第 2 部分是乐观的。
  • @sn42 我确实问了一个具体的问题:“因此,我想问我必须做什么才能只使用 JDK 附带的工具(即 javac)”,尽管我将编辑问题以使其更清楚。魔术代码是指哪里有代码块以及复制和粘贴该代码块的说明,没有说明该代码块中的代码如何工作,或者如果我没有教程,我将如何自己创建它。

标签: java spring spring-boot


【解决方案1】:

我想只使用 javac 和其他 JDK-default 工具编译 Spring 应用程序

简短的回答是你可以,但不值得花时间。您首先需要下载所有 Spring jar。您也下载了它们的依赖 jar(检查每个 jar 的 pom.xml 文件中的传递依赖)。然后下载这些 jar 的依赖项,依此类推,直到所有叶子 jar 都没有进一步的依赖项。然后你构建一个谁知道多长的类路径字符串传递给 javac。最终,您使用相同的类路径 + 从 javac 获得的类使用 java 运行您的类。

以上需要几天甚至几周的时间。与使用构建系统(如 maven)的一两分钟相比。想到的类比是用汇编程序编写程序:理论上你可以做到,但时间不多的人更喜欢使用更高级的语言。

如果您想知道“魔法代码”的特定 sn-p,请告诉我们。

【讨论】:

    【解决方案2】:

    Spring boot 使用MavenGradle 作为依赖管理工具。我对 maven 比较熟悉,所以会用它来回答你的问题。但在此之前,您应该有一个basic understanding of maven, how as well as why it is used。当您导航到 Spring Initializer 网站时,会为您提供一个表单,该表单可用于从此起始页中选择您的依赖项。您可以选择构建工具、编程语言和 Spring Boot 版本。选择好依赖项后,就可以生成一个 spring boot 项目了。在 IDE 中打开此项目后,您可以看到下载的项目具有非常小的 maven 项目类型结构,其中一个主类已用 @SpringBootApplication 注释。根据文档:

    @SpringBootApplication 注解等价于使用 @Configuration@EnableAutoConfiguration@ComponentScan 与 他们的默认属性

    这个类的main(...) 简单调用SpringApplication#run,它允许spring boot 引导应用程序并加载ApplicationContext。现在,由于您已经拥有@ComponentScan,因此将扫描当前目录中的所有包以查找 spring 组件,其中包括 @Controller@RestController@Service 等。这些组件将在需要时由 spring 调用。 您下载的应用程序还包含POM 文件。该文件定义了您的应用程序需要的依赖项。在顶部,您有一个<parent>,它定义了spring 使用的父pom 文件来存储spring boot 常用拉取依赖项的版本。例如,here 是对 spring boot starter web 的父 pom 的引用。 该应用程序可以打包为可执行的 jar 或 war。为此,请编辑您的 pom 文件以包含以下内容:

    <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <version>2.0.0.RELEASE</version>
                    <executions>
                        <execution>
                            <goals>
                                <goal>repackage</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    

    这将允许您使用命令行运行您的应用程序: $java -jar your-spring-app.jar。请注意,在您使用 $mvn clean package 构建应用程序后,您的 jar 文件将存储在目标包中

    【讨论】:

    • 这不能回答我的问题。它的核心是“我想问我必须做什么才能只使用JDK附带的工具(即javac)。”这个答案解释了如何使用 maven,而不是默认的 JDK 工具来做到这一点,并在底部包含一个代码块,没有说明如何自己创建这样的代码块,使其成为神奇的代码。
    • 对不起,maven 是标准的构建工具。否则,您将不得不手动下载依赖项,这既乏味又容易出错。
    • 这正是我想要做的。我发现 gradle 缺乏好的文档,以及大量的魔术代码比手动添加 jar 更加乏味和令人沮丧。
    • @john01dav 我还在等你解释你的意思是什么魔术代码。 Gradle 和 maven 是标准构建工具,我相信如果我们最终了解您是否在苦苦挣扎,我们可以提供帮助:)
    猜你喜欢
    • 1970-01-01
    • 2021-12-25
    • 2021-11-17
    • 1970-01-01
    • 2015-10-08
    • 2020-01-13
    • 2017-10-06
    • 1970-01-01
    • 2013-10-15
    相关资源
    最近更新 更多