【问题标题】:Vaadin: How to add META-INF/services to the war?Vaadin:如何在战争中添加 META-INF/服务?
【发布时间】:2017-04-12 14:56:36
【问题描述】:

我有一个 Vaadin 7 maven Web 项目,其中包含一些在 META-INF/services 上创建服务定义的注释。

我将此添加到 pom 以便处理注释:

<!-- Run annotation processors on src/main/java sources -->
<plugin>
    <groupId>org.bsc.maven</groupId>
    <artifactId>maven-processor-plugin</artifactId>
    <version>3.3.1</version>
    <executions>
        <execution>
            <id>process</id>
            <goals>
                <goal>process</goal>
            </goals>
            <phase>generate-sources</phase>
        </execution>
    </executions>
</plugin>

文件显示在target/classes/META-INF/services 中,但没有进入最后的战争。

我尝试像这样将文件夹添加到 maven-war-plugin:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <version>3.0.0</version>
    <configuration>
        <failOnMissingWebXml>false</failOnMissingWebXml>
        <packagingIncludes>target/classes/*</packagingIncludes>
    </configuration>
</plugin>

但是大多数 Vaadin 文件都没有进入战争并且它不起作用。有什么想法吗?

【问题讨论】:

  • 查看maven.apache.org/plugins/maven-war-plugin/usage.html 以确保您的项目结构正确并仔细检查复制的内容。
  • maven-compiler 插件会自动为您运行注释处理器。你不需要一个特殊的插件。处理器只需要在编译器类路径中 - 通常作为 provided 范围依赖项。

标签: java maven maven-3 war vaadin7


【解决方案1】:

请看https://maven.apache.org/plugins/maven-war-plugin/usage.html

您的META-INF 文件夹似乎位于src/main/resources 目录中。

通常在创建WAR 时,您会创建一个目录src/main/webapp,您可以在其中拥有您的WEB-INFMETA-INF 和其他所需文件夹。

 |-- src
 |   `-- main
 |       |-- java
 |       |   `-- com
 |       |       `-- example
 |       |           `-- projects
 |       |               `-- SampleAction.java
 |       |-- resources
 |       |   `-- images
 |       `-- webapp
 |           |-- META-INF
 |           |-- WEB-INF

webapp 文件夹中的所有内容都将复制到 WAR 的根目录中。

webapp 的路径也可以使用 warSourceDirectory 属性配置

对于您的场景 - 生成的源

显然您不想将生成的源代码保存在您的src/* 文件夹中并且不想对其进行版本控制。

您可以通过在版本控制元数据中添加忽略过滤器来解决此问题;或通过创建符号链接;或使用copy-resources 之前的一些答案,但不推荐使用。

您可以通过添加webResources 配置来实现此目的,以从target 文件夹中复制生成的源代码

请看http://maven.apache.org/plugins/maven-war-plugin/examples/adding-filtering-webresources.html

<plugin> 
  <groupId>org.apache.maven.plugins</groupId> 
  <artifactId>maven-war-plugin</artifactId> 
  <configuration> 
    <webResources> 
      <resource> 
        <directory>${project.build.directory}/target/generated-sources</directory> 
        <targetPath>META-INF</targetPath> <!-- introduced in plugin v 2.1 -->
        <includes> 
          <include>*.class</include> 
        </includes> 
      </resource> 
    </webResources> 
  </configuration> 
</plugin> 

【讨论】:

  • 就我而言,它不是生成的源。是一个服务定义文件,但这已经足够接近了。
【解决方案2】:

我最终使用了这个无关答案中的方法:Maven: include folder in resource folder in the war build

这是我最终做的:

             <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>3.0.0</version>
                <configuration>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                    <webResources>
                        <resource>
                            <directory>target/classes/META-INF/services</directory>
                            <includes>
                                <include>*.*</include>
                            </includes>
                            <targetPath>META-INF/services</targetPath>
                        </resource>
                    </webResources>
                </configuration>
            </plugin>

基本上把services文件夹加为资源,放在最后一战的正确位置。

【讨论】:

    【解决方案3】:

    你可以试试这个:

    <execution>
        <id>process</id>
        <phase>generate-sources</phase>
        <goals>
            <goal>process</goal>
        </goals>
        <configuration>
            <finalName>${projectId}</finalName>
            <outputDirectory>relative project directory</outputDirectory>
            <includes>
                <include>path</include>
            </includes>
        </configuration>
    </execution>
    

    【讨论】:

      猜你喜欢
      • 2020-02-11
      • 2017-08-06
      • 1970-01-01
      • 2011-07-17
      • 2016-10-02
      • 2018-10-18
      • 2016-09-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多