java - 如何使用WebApplicationInitializer依赖项目?

标签 java spring gradle project-structure

我有一个项目结构,在其中有一些基本项目,在其中实现了所有功能,此外,还有一些用于不同用途/部​​署的项目,如下所示:

  • foo-core
  • foo-production,取决于foo-core(产生war文件,然后我交付给客户)
  • foo-standalone,取决于foo-core(产生用于内部测试的 war )
  • foo-ui-test,取决于foo-core(使用Arquillian + Selenium进行的UI测试)

  • 现在,有越来越多的类可用于foo-standalone和foo-ui-test,但我不想将这些类部署到客户。因此,将foo-core作为可能的项目存储在其中。剩下的两个选项是:
  • 一个新项目foo-helper,它依赖于foo-core,并使foo-standalone和foo-ui-test依赖于foo-helper而不是foo-core。
  • 使foo-ui-test依赖于foo-standalone

  • 我想选择选项2,因为我已经有很多项目。选项2剩下的问题是,这两个项目(foo-standalone和foo-ui-test)都具有Spring WebApplicationInitializer ...
    现在我在弄弄我的构建系统(使用gradle),并且能够在foo-standalone项目中排除WebApplicationInitializer,并且仅在构建foo-standalone.war文件时显式包括它。

    所生成的用于foo-standalone的build.gradle文件似乎是“hackish”的,如果我重命名或移动WebApplicationInitializer类,它将损坏。我想知道,是否还有另一种方式可以实现我想要的目标,或者是否必须创建一个新项目。

    更新
    我将WebApplicationInitializer类从src / main / java移到src / init / java,并按如下所示更改了foo-standalone的build.gradle:
    sourceSets {
      init {
        java {
          compileClasspath += sourceSets.main.runtimeClasspath
        }
      }
    }
    
    war {
      classpath sourceSets.init.runtimeClasspath
    }
    

    我猜想这是最短的自定义方式,还是有内置的gradle功能可以做到这一点?

    最佳答案

    Maven仅允许您依赖JAR项目。有一个功能,您可以在其中放置 war 叠加层,其中一个 war 项目会扩展一个 child 并覆盖某些位(请参见https://maven.apache.org/plugins/maven-war-plugin/overlays.html),这似乎是您的foo-standalone和foo-ui-test之间的关系。

    因此,使foo-helper成为 war 项目,并使foo-standalone,foo-ui-test和foo-production使用war覆盖扩展它。

    如果有非生产位,则foo-core可以保留为jar。如果要创建内部foo-core-internal以依赖foo-core,则将foo-core保留为内部/测试位。

    关于java - 如何使用WebApplicationInitializer依赖项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41930773/

    相关文章:

    java - Selenium 2 Webdriver 与 JUnit 或 TestNG for PageObject 设计模式

    java - 将 jhipster 应用程序部署到不同的上下文路径

    java - @Value 和 @PropertySource ("classpath:application.properties")始终返回 null

    java - java计算索引前的空格数

    java - 比较存储在日期对象中的日期并返回一个 boolean 值

    java - Gradle:为什么 sourceSets.main.output 可用,但其他输出不可用?

    android - 找不到 com.android.tools.build :gradle:4. 4

    java - Gradle jpackage 创建无法运行的应用程序

    java - 使用 SQLOpenHelper 获取 ArrayList 不起作用

    javascript - 网站和移动应用程序的登录 API 应该相同还是不同?