Maven Shade - 更改文件名并替换文本

标签 maven elasticsearch lucene maven-shade-plugin

我尝试使用 Maven Shade 并包装 ElasticSearch jar。

之所以这样做,是因为我的项目中Lucene版本之间存在冲突。

但是当我使用Shade时我发现了问题。它不会更改 META-INF/services 中的文件名并且也不会更改特定文件中的 FQN。

我需要改变org.apache.lucene.codecs.Codec文件及其内容。因为如果这个文件保留其名称,那么我会收到错误
"Caused by: java.lang.IllegalArgumentException: An SPI class of type shaded_lucene_4_10_4.org.apache.lucene.codecs.Codec with name 'Lucene410' does not exist. You need to add the corresponding JAR file supporting this SPI to your classpath. The current classpath supports the following names: []"

是否可以使用 Maven Shade 插件封装 ElasticSearch?

Here is my pom.xml

最佳答案

是的,这是可能的,只需要添加一个ServicesResourceTransformer条目。 像这样:

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>2.4.1</version>
    <executions>
      <execution>
        <phase>package</phase>
        <goals>
          <goal>shade</goal>
        </goals>
        <configuration>
          <transformers>
            <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
              <mainClass>org.myorg.esclient.App</mainClass>
            </transformer>
            <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
          </transformers>
        </configuration>
      </execution>
    </executions>
  </plugin>

检查: http://maven.apache.org/plugins/maven-shade-plugin/examples/resource-transformers.html#ServicesResourceTransformer

关于Maven Shade - 更改文件名并替换文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31586697/

相关文章:

java - 无法在 spring 中处理配置类的导入候选

java - 如何配置 Maven2 发布到 Artifactory?

Elasticsearch 日期范围检查嵌套的日期范围数组

lucene - 使用 Lucene 的提示/建议

java - Spring-boot 分页以及 Lucene 搜索的结果

lucene - 从 Lucene 查询中获取匹配的术语

java - 什么maven目标可以用于版本比较?

maven - 两个相互依赖的 Maven 项目

elasticsearch - 在Elasticsearch查询中使用一个或多个值的术语

elasticsearch - Bucket Span [X-PACK] 中产生的异常数量