我正在尝试为需要共享一组通用Jars(在某些情况下,只是导入到工作项目中的代码)的项目设置目录结构(和项目文件)。
例如,假设我有一个名为“ common”的通用项目。该项目包含可被独立的Java应用程序或在这种情况下为动态Web应用程序使用的通用代码和jar。
我的Web项目(简称为webapp1)从“ common”导入源代码,所以这不是问题。我这样做的原因是因为,在这一点上,创建一个“通用”项目并将其编译为jar然后从webapp1引用它实际上对我没有任何帮助,因为webapp1不会拾取供应商的jar它们都必须在WEB-INF / lib下。
那我该怎么做呢?我曾经考虑过将WEB-INF变成一个到我目录中的另一个目录的符号链接,但这不适用于Windows环境。但这基本上就是我想要的东西。这是对此的描述:
common \
src \
some.source.packages
lib \
HibernateLibs \
hibernate.jar
hibernate2.jar
ApacheCommonLibs \
common-string.jar \
etc.
webapp1
src \
local.source.packages
reference to common.source.packages above
WebContent \
WEB-INF \
lib \
This is where I'd like to place references to the libs in common
(only those I need for this web app)
如果我只是拥有通用的webapp1参考,那么这种工作方式就可以了,但是当我尝试从IDE运行我的webapp1时,这些库实际上不在正确的位置。
请注意,像Maven之类的构建系统已经或多或少地出现了,因为我的公司仅允许特定的lib和这些lib的版本(这很痛苦,但这是我必须使用的)。
感谢您对此的见解。我并不拘泥于项目结构,但我想避免在整个项目中使用同一个JAR的多个项目,而必须保持它们同步(更不用说它使签出代码的速度非常慢)。
答案 0 :(得分:2)
创建Web项目时,无需在WEB_INF文件夹中添加库。
解决方案:
您可以将库安装到本地Maven存储库,也可以安装到本地计算机。因此,依赖项将从您的本地计算机中检索。很简单:
mvn install:install-file -Dfile=[file_path] -DgroupId=[your group id] -DartifactId=[artifact id] -Dversion=[version] -Dpackaging=jar
也,您可以在 Nexus 或 Jfrog人工制品服务器上检索罐子。对于您的公司,此服务器将仅。因此,这些罐子将只能只能用于您的公司。
默认情况下,spring boot插件将项目的所有依赖项打包为具有以下结构的可执行JAR:
MANIFEST.MF 负责查找JAR文件。在春季,我们有以下午餐盒: JarLauncher , WarLauncher 和 PropertiesLauncher 。它们的目的是加载资源。 JarLauncher仅能够能够在BOOT-INF和lib目录内的JAR中定位和加载类。但是您可以使用 PropertiesLauncher 在项目外部指定jar文件。因此,让我们开始吧!首先,您应该使用ZIP布局。
行家:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<layout>ZIP</layout>
</configuration>
</plugin>
等级:
springBoot{
layout = "ZIP"
}
然后一切都很简单。现在运行 Web应用程序:
java -Dloader.path=lib,external-jar.jar -jar starter.jar
现在,我们有了Web应用程序没有 WEB_INF文件夹,并且我们在应用程序外部拥有所有依赖项jar文件。 最后:我们有许多项目使用与项目外部相同的库jar。
答案 1 :(得分:0)
您不应依赖Eclipse构建部署包(.war文件)。使用构建工具,例如Ant,Maven,Gradle,...
如果公司具有一组标准的授权库,则公司应创建一个包含这些库的内部Maven存储库(例如,使用Artifactory),并且您应使用Maven来获取 that 存储库中特定项目所需的库,并构建部署包。
优势:库都位于同一位置,而不是版本控制系统中。
如果您不能让公司创建存储库,而是拥有一个包含所有库的“公共”项目,请使用Ant来构建您的项目并创建部署包。
优点:项目构建可以作为批处理构建进行复制。
Gradle是Maven和Ant的有效替代品。