- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在开发一个将包含在其他项目(项目 B、项目 C ...)中的 spring boot 项目(项目 A)。我在项目A中有几个依赖,但是在导入项目A的项目中,可能需要一些或只需要一个。我试图找到一种方法来在打包项目 A 时排除 jar 依赖项,以便项目 B 在运行时提供所需的依赖项。当项目 A 出于测试目的独立运行时,我希望有可用的依赖项。
已经尝试过以下
我试过使用:
<scope>provided</scope>
<optional>true</optional>
jar 最终还是出现在了最终的 Artifact 中。
还尝试将以下内容添加到 spring-boot-maven-plugin
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
<configuration>
<excludeArtifactIds>spring-boot-starter-redis</excludeArtifactIds>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
这只会删除 spring-boot 依赖项,但此依赖项的子项的 jar 仍会在最终 Artifact 中结束。
最佳答案
在我们当前的项目中,我们需要为应用程序创建一个 war 文件,该文件必须部署在 JEE 服务器中。 war 文件必须只包含所需的 jar 文件,不包含 JEE 服务器已经提供的任何 API 或实现。
但是,我们希望保留生成可执行 war 或 jar 文件的可能性,如 Boot 默认提供的那样,用于测试目的。
为实现它,我们已将所有可选依赖项设置为提供。比如我们在开发中有一些直接依赖,比如JDBC驱动,我们不想包含在部署的war文件中。还有一些引导主启动器,它们提供与 JEE 服务器中不需要的其他启动器和库的依赖关系。 spring-boot-starter-tomcat 和 spring-boot-starter-jdbc 启动程序就是这种情况。在我们的项目中,我们的 pom.xml 文件中有以下依赖项:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc7</artifactId>
<scope>provided</scope>
</dependency>
这样,这些依赖项将不会包含在原始 jar/war 文件中,但 spring boot maven 插件会将它们包含在重新打包的 jar/war 的 lib-provided 文件夹中。
这些依赖项不会被 JEE 服务器看到,但会使打包的应用程序比需要的更大。解决办法是告诉spring boot maven插件用其他名称创建重新打包的文件,同时排除开发工具:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>${start-class}</mainClass>
<classifier>exec</classifier>
</configuration>
</plugin>
这样maven会为你的应用生成两个包:
在您的情况下,您可以使用相同的技术来生成要包含在项目 B 中的项目 A 的包,以及要作为独立运行的项目 A 的包。
如果您不需要为项目 A 创建独立运行的包,并且只在您的 IDE 中测试它,您甚至可以从您的 pom.xml.
关于java - Spring 启动 : Exclude dependencies on packaging,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37961730/
我有这样的情况: ids = [None, None, None] foo = Foo.objects.filter(common=True).exclude(id__in=ids) 这似乎总是排除所
我创建了一个简单的测试目录: ├── backup.tgz ├── Dummy-dir │ ├── dummy-file-a.txt │ ├── dummy-file-b.txt │ ├─
有了这个 persistence.xml : org.eclipse.persistence.jpa.PersistenceProvider osgi:s
我正在使用 powershell 更新索引策略,但它默认在排除路径中添加 "path": "/\"_etag\"/?" 属性我希望索引策略是 { "indexingMode": "consis
我正在使用 Django 查询从表中过滤掉一些事务,其中一个事务可能在表中有多个条目。 例如示例表 +---------------+---------+ | TransactionId | Stat
我使用 eclipselink 作为 JPA 提供程序,并且需要将实体保存在 jar 文件中。所有 jar 实体都用 @Entity 进行注释。我尝试了 false 和 true 但它没有自动检测实体
这是 Ignore files in git log -p 的后续行动也与Making 'git log' ignore changes for certain paths有关. 我正在使用 Git
我在 Android Studio 中导入了一个库项目,但我无法排除一个组,因为当 compile 指令位于包含的项目中时,gradle 找不到那个 exclude 方法方法? 它可以找到以下方法的排
我正在使用 gitbash 和 git 版本 2.20.1.windows.1。 commit , diff , branch一切正常,但 git status (当然是最基本的命令?)失败。错误信息
假设最开始的命令是这样的 rsync -e 'ssh -p 30000' -avl --delete --stats --progress demo@123.45.67.890:/home/demo
我有一个我想忽略的日期列表: private val excludeDates = List( new DateTime("2015-07-17"),
我有一个这样的表: DESC mytable id | parent 1 | 2 2 | null 3 | null 4 | null 5 | 3 ... | ... 3种条目:
首先,这是我的代码: Bill: 它应该像这样工作: 当我点击“搜索”时,URL 应更改为 "shpapp01/Web/Public.html#/PublicWeb/Tracking/Searc
我继承了一堆C#代码。对于几个方法定义,我找到了 ///作为它前面唯一的 XMLDoc。我试图用谷歌搜索它的含义,但没有成功。有人可以解释一下这可能意味着什么吗? 最佳答案 在NDoc至少,这意味着应
我在将单个目录从远程机器复制到本地时遇到问题。 这是我使用的命令: rsync -chavzP --stats --exclude='/var/www/html/px3' root@IPHERE:/v
我有一个从 1 到 100 的数组: array=$(seq 100) 我的任务是排除 60 到 80 的范围。 最佳答案 您可以将参数扩展与偏移/长度规范一起使用。 #! /bin/bash arr
背景 我一直在使用 Exclude和 Extract实用程序类型,但遇到过我只想匹配确切类型而不是子类型的情况。 到目前为止 我已经成功创建了一个 StrictExtract只提取完全匹配的类型的实用
我在 Windows 上,使用 Subersive 运行 Eclipse Indigo 以连接到 远程 svn 仓库。 我有一个项目 check out 到本地文件夹。项目中有一些目录我想从 chec
我正在 Django 中创建一个稀疏的首选项表。我的模型很简单: class Preference(models.Model): user = models.ForeignKey(settin
我有一个 tar/gzip 文件,我正在使用 ansible unarchive 模块提取到主机列表。 以下是configs.tgz的部分内容列表: -rw-rw-r-- ian/ian
我是一名优秀的程序员,十分优秀!