更新:解决了!发布解决方案作为我自己的答案我被允许在两天内接受它。
过去几天我一直在追逐这个兔子洞,我的问题在那个时候已经彻底改变了形状。最初,我认为Spring Boot
存在问题,因为它无法解析我的@Configuration
个注释类之一。调试一下,我确定Spring正在查找我的JAR
绑定依赖项的所有正确位置,但在尝试从{{1}加载类时遇到FileNotFoundException
}。
我被这个抛弃了,因为所讨论的JAR
在类路径上是非常可验证的。我可以在应用启动期间打印出类路径,并看到我的JAR
内部生活得很舒适。
所以我简化了。并简化。最后,我把事情归结为一个包含两个Java源文件的项目,以及一个小的占位符JAR
通过JAR
。此Maven
仅包含一个文件:JAR
。
这完美无缺。从那里,我在这个小项目上交换了依赖tiny/jar/BaseTest.class
。 。 。并且启动失败。所以我比较了JAR
并发现了一些奇怪的东西。
虽然我的小JARs
包含文件夹层次结构:
JAR
较大的tiny/jar/BaseTest.class
看起来像:
JAR
这个WEB-INF/classes/com/company/...
前缀是杀死WEB-INF/classes
类加载器的毒药。它期望从根开始查找类:Spring Boot
- 不允许使用前缀。
我相信Maven的依赖管理在这里做了一些棘手的事情。使用com/company/...
目标创建JAR
时,其中包含clean install
根。如果我将此版本的com/company/...
手动复制到我的服务器JAR
文件夹中,则所有内容都能正常运行,识别并完全启动。
但是当使用Maven引入依赖关系时,WEB-INF/lib
会在我的文件夹层次结构上加上前缀,从而破坏所有内容。
有谁知道如何阻止Maven改变WEB-INF/classes
的目录结构? JAR
是100%正确的,直到Maven将其作为依赖项拉出来,突然出现JAR
前缀。
以下是三个WEB-INF/classes
文件供参考。我已经删除了大量的依赖关系,但保留了其他所有内容以便于阅读。
POM
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>tiny</groupId>
<artifactId>jar</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.2.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<name>jar</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
</dependencies>
</project>
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.company</groupId>
<artifactId>company-foundation</artifactId>
<version>0.7.0-SNAPSHOT</version>
<packaging>jar</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.2.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.ws</groupId>
<artifactId>spring-ws-core</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.ws</groupId>
<artifactId>spring-ws-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.webflow</groupId>
<artifactId>spring-webflow</artifactId>
<version>2.4.0.RELEASE</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin> <!-- Sonar -->
<groupId>org.codehaus.mojo</groupId>
<artifactId>sonar-maven-plugin</artifactId>
<version>2.5</version>
</plugin>
</plugins>
</build>
<repositories>
<!-- To use snapshots, you must also use the Sonatype Snapshots respository -->
<repository>
<id>sonatype-snapshots</id>
<url>https://oss.sonatype.org/content/repositories/snapshots/</url>
</repository>
<repository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>https://repo.spring.io/snapshot</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>https://repo.spring.io/snapshot</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
<pluginRepository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</project>
答案 0 :(得分:3)
解决了我的问题!我刚刚完成了对项目配置的研究,并将它们与任何可疑的偏差进行比较。事实证明,JAR
中较大的Eclipse
项目的Deployment Assembly
(在“属性”和“部署程序集”下找到)设置为:
来源============部署路径
src/main/java
--------&gt; /WEB-INF/classes
src/main/resources
- &gt; /WEB-INF/classes
这导致我的服务器将JAR
部署到内部/WEB-INF/classes
文件夹中。
将Deploy Path
设置更改为/
解决了问题!现在一切都很完美!宇!