Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 瓦丁:如何在战争中添加META-INF/服务?_Java_Maven_Maven 3_War_Vaadin7 - Fatal编程技术网

Java 瓦丁:如何在战争中添加META-INF/服务?

Java 瓦丁:如何在战争中添加META-INF/服务?,java,maven,maven-3,war,vaadin7,Java,Maven,Maven 3,War,Vaadin7,我有一个Vaadin 7 maven web项目,它有一些注释,可以在META-INF/services上创建服务定义 我将其添加到pom中,以便处理注释: org.bsc.maven maven处理器插件 3.3.1 过程 过程 生成源 这些文件显示在target/classes/META-INF/services中,但不会进入最终战争 我尝试将文件夹添加到maven war插件,如下所示: org.apache.maven.plugins maven战争插件 3.0.0 假的 目标/类

我有一个Vaadin 7 maven web项目,它有一些注释,可以在
META-INF/services
上创建服务定义

我将其添加到pom中,以便处理注释:


org.bsc.maven
maven处理器插件
3.3.1
过程
过程
生成源
这些文件显示在
target/classes/META-INF/services
中,但不会进入最终战争

我尝试将文件夹添加到maven war插件,如下所示:


org.apache.maven.plugins
maven战争插件
3.0.0
假的
目标/类别/*
但是大多数的瓦丁档案都没有进入战争,也不起作用。有什么想法吗?

你可以试试这个:

<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>

过程
生成源
过程
${projectd}
相对项目目录
路径

我最终使用了这个不相关答案的方法:

下面是我最后做的:

             <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>

org.apache.maven.plugins
maven战争插件
3.0.0
假的
目标/类/META-INF/服务
*.*
META-INF/服务
基本上添加了服务文件夹作为资源,并将其放置在最终战争的正确位置。

请参见

看起来您的
META-INF
文件夹位于
src/main/resources
目录中

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

 |-- src
 |   `-- main
 |       |-- java
 |       |   `-- com
 |       |       `-- example
 |       |           `-- projects
 |       |               `-- SampleAction.java
 |       |-- resources
 |       |   `-- images
 |       `-- webapp
 |           |-- META-INF
 |           |-- WEB-INF
您的
webapp
文件夹中的所有内容都将复制到
WAR
中的根目录中

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

对于您的场景生成的源 显然,您不想将生成的源代码保存在
src/*
文件夹中,也不想对其进行版本设置

您可以通过向版本控制元数据添加忽略过滤器来解决此问题;或者通过创建符号链接;或者使用
复制资源
,如前面的一些回答所述,但不推荐使用

您可以通过添加
webResources
配置从
target
文件夹复制生成的源代码来实现这一点

请看


org.apache.maven.plugins
maven战争插件
${project.build.directory}/target/generated sources
META-INF
*.类

查看一下以确保项目结构正确,并仔细检查复制的内容。maven编译器插件会自动为您运行注释处理器。你不需要特别的插件。处理器只需要位于编译器类路径中-通常作为
提供的
作用域依赖项。在我的情况下,它不是生成源。是一个服务定义文件,但这已经足够接近了。
<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>