3

我有一个具有以下结构的 WEBAPP MULTI PROJECT Gradle 构建。我也在使用弹簧框架。尽管找不到我的 bean 文件(dao-beans.xml),但我无法让 webapp 在 Jetty 中运行。如果我将 bean 文件复制到 webapp 构建目录,它们会被找到,但是 Spring 无法实例化我的类,因为它无法在类路径中找到类。我究竟做错了什么?

+-- build.gradle
+-- dao-impl
¦   +-- src
¦       +-- main
¦       ¦   +-- java
¦       ¦   +-- resources
¦       ¦       +-- dao-beans.xml
¦       +-- test
¦           +-- java
+-- gradle.properties
+-- presenter
¦   +-- build.gradle
¦   +-- src
¦       +-- main
¦       ¦   +-- java
¦       ¦   +-- resources
¦       ¦   ¦   +-- beans.xml
¦       ¦   +-- webapp
¦       ¦       +-- WEB-INF
¦       ¦           +-- web.xml
¦       +-- test
¦           +-- java
+-- settings.gradle

演示者的 build.gradle:

apply plugin: "jetty"
apply plugin: "war"

jettyRun {
    httpPort = 8080
    scanIntervalSeconds = 3
}

战争结构:

├── META-INF
│   └── MANIFEST.MF
└── WEB-INF
    ├── classes
    │   ├── beans.xml
    │   ├── *.classes
    │   └── logback.xml
    ├── lib
    │   ├── *.jar
    └── web.xml
4

1 回答 1

1

您需要使您的“dao-impl”成为一个独立的 Java 项目(因此顶级项目构建它)。

新文件 dao-impl/build.gradle

apply plugin: "java"

指导顶层项目关于子项目。

然后在现有的presenter/build.gradle 文件中添加对该其他项目的依赖:

dependencies {
  ...
  compile project(':dao-impl').sourceSets.main.output
}

这应该会导致 JAR 在部署的 Jetty 中在通常的位置 WEB-INF/lib/dao-impl-xyzjar 中发出(如果可能,最好取消 .sourceSets.main.output,但两种形式都应该工作)

于 2012-11-18T14:14:42.407 回答