Как добавить файл в папку EAR META-INF - Maven - программирование
Подтвердить что ты не робот

Как добавить файл в папку EAR META-INF - Maven

Я хочу переместить файл startup MBEAN (startup-client-service.xml) из папки EJB > META-INF, в EAR > META-INF. Я попытался с плагином maven-resources-plugin, но просто скопировал файл из EJB > META-INF в Target в папку EAR. Но в построенном EAR файл startup-client-service.xml недоступен в META-INF

Как перенести мой загрузочный файл на META-INF в ухо > META-INF?

Это pom файл уха.

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>

<parent>
    <groupId>com.testapp</groupId>
    <artifactId>my-client-parent</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</parent>

<name>Test app EAR</name>
<artifactId>my-client-ear</artifactId>

<packaging>ear</packaging>

<dependencies>

    <dependency>
        <groupId>com.testapp</groupId>
        <artifactId>my-client-ejb</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <type>ejb</type>
    </dependency>
</dependencies>
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-ear-plugin</artifactId>
            <version>2.8</version>
            <configuration>
                <defaultLibBundleDir>lib</defaultLibBundleDir>
                <modules>
                </modules>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <version>2.6</version>
            <executions>
                <execution>
                    <id>copy-resources</id>
                    <phase>validate</phase>
                    <goals>
                        <goal>copy-resources</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>META-INF</outputDirectory>
                        <resources>
                            <resource>
                                <directory>${project.parent.basedir}/ejb/src/main/resources/META-INF</directory>
                                <filtering>true</filtering>
                            </resource>
                        </resources>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.eclipse.m2e</groupId>
                <artifactId>lifecycle-mapping</artifactId>
                <version>1.0.0</version>
                <configuration>
                    <lifecycleMappingMetadata>
                        <pluginExecutions>
                            <pluginExecution>
                                <pluginExecutionFilter>
                                    <groupId>
                                        org.apache.maven.plugins
                                    </groupId>
                                    <artifactId>
                                        maven-ear-plugin
                                    </artifactId>
                                    <versionRange>
                                        [2.8,)
                                    </versionRange>
                                    <goals>
                                        <goal>
                                            generate-application-xml
                                        </goal>                                         
                                    </goals>
                                </pluginExecutionFilter>
                                <action>
                                    <ignore></ignore>
                                </action>
                            </pluginExecution>
                        </pluginExecutions>
                    </lifecycleMappingMetadata>
                </configuration>
            </plugin>
        </plugins>
    </pluginManagement>
</build>

<profiles>
    <profile>
        <id>copy_bundle</id>
        <properties>
            <install.dir>${jboss.dir}\server\default\deploy</install.dir>
        </properties>
        <build>
            <plugins>
                <plugin>
                    <artifactId>maven-antrun-plugin</artifactId>
                    <executions>
                        <execution>
                            <id>Copying bundle to destination folder</id>
                            <phase>package</phase>
                            <goals>
                                <goal>run</goal>
                            </goals>
                            <configuration>
                                <tasks>
                                    <copy
                                        file="${project.build.directory}/${project.build.finalName}.${project.packaging}"
                                        overwrite="true" todir="${install.dir}" />
                                </tasks>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>

Ниже показан захват экрана рабочего пространства проекта

Here is the project structure

4b9b3361

Ответ 1

Правильный способ - добавить файлы в src/main/application вместо src/main/resources. Вы также можете указать другую конфигурацию earSourceDirectory.

Ответ 2

Я предлагаю вам использовать плагин ресурсов Maven на этапе подготовки пакета, чтобы скопировать файл в папку ${build.directory}/${project.artifactId} - ${project.version}/META-INF, которая папка, из которой заканчивается окончательный EAR. Пакет подготовки фазы находится непосредственно перед тем, как EAR застегнут.

Ответ 3

  • Используйте фазу "process-resources" с целевыми "ресурсами" (или mekondelta предложение использовать "prepare-package" )
  • Задайте выходной каталог ${basedir}/target/${project.artifactId} - ${project.version}

Здесь полный пример

<build>
    <plugins>
        <plugin>
            <artifactId>maven-resources-plugin</artifactId>
            <executions>
                <execution>
                    <id>copy-resources</id>
                    <phase>process-resources</phase>
                    <goals>
                        <goal>resources</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>
                            ${basedir}/target/${project.artifactId}-${project.version}
                        </outputDirectory>
                        <resources>
                            <resource>
                                <directory>${project.parent.basedir}/ejb/src/main/resources/META-INF</directory>
                            </resource>
                        </resources>
                    </configuration>
                </execution>
            </executions>
        </plugin>
...

Ответ 4

Основываясь на предложении mekondelta, мне удалось добавить файлы в EAR META-INF с помощью плагина maven-assembly-plugin. В моем случае файлы **. Properties * хранятся в папке "src/main/resources/META-INF" в моем проекте.

По моему POM.XML имеет следующую конфигурацию сборки:

    <build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
        </resource>
    </resources>

    <plugins>
       <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-ear-plugin</artifactId>
            <version>2.10.1</version>
            <configuration>
                <version>5</version>
                <defaultLibBundleDir>lib/</defaultLibBundleDir>
                <skinnyWars>true</skinnyWars>
                <jboss>
                    <version>5</version>
                    <loader-repository>mcsa:loader=my-application</loader-repository>
                    <loader-repository-config>java2ParentDelegation=false</loader-repository-config>
                    <data-sources>
                        <data-source>my-ds.xml</data-source>
                    </data-sources>
                </jboss>
            </configuration>
        </plugin>
        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>2.6</version>
            <executions>
                <execution>
                    <id>make-metainf</id>
                    <!--<phase>initialize</phase>-->
                    <phase>generate-resources</phase>
                    <configuration>
                        <!--<finalName>.</finalName>-->
                        <finalName>${project.artifactId}-${project.version}</finalName>
                        <appendAssemblyId>false</appendAssemblyId>
                        <descriptors>
                            <descriptor>src/main/resources/metainf-assembly.xml</descriptor>
                        </descriptors>
                    </configuration>
                    <goals>
                        <goal>directory</goal>
                    </goals>
                </execution>

            </executions>
        </plugin>
    </build>

Файл metainf-assembly.xml выглядит следующим образом:

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2
      http://maven.apache.org/xsd/assembly-1.1.2.xsd">
<id>meta-data</id>
<includeBaseDirectory>false</includeBaseDirectory>
<formats>
    <format>dir</format>
</formats>

<fileSets>
    <fileSet>
        <directory>${project.build.directory}/filtered-resources/META-INF/</directory>
        <outputDirectory>META-INF</outputDirectory>
        <includes>
            <include>*.properties</include>
        </includes>
    </fileSet>
</fileSets>

Ответ 5

Мне удалось сделать это с помощью maven-resources-plugin

            <plugin>
            <artifactId>maven-resources-plugin</artifactId>
            <version>3.1.0</version>
            <executions>
                <execution>
                    <id>copy-resources</id>
                    <phase>validate</phase>
                    <goals>
                        <goal>copy-resources</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>${basedir}/target/${env.APPLICATION_NAME}/META-INF/</outputDirectory>
                        <resources>
                            <resource>
                                <directory>src/main/application/</directory>
                                <filtering>true</filtering>
                            </resource>
                        </resources>
                    </configuration>
                </execution>
            </executions>
        </plugin>

пример структуры проекта

Примечание: ресурс должен находиться в src\main\application\META-INF\weblogic-application.xml

Ответ 6

Самый простой способ, по крайней мере, если это не EAR (не пробовал), это просто иметь каталог META-INF с требуемыми файлами в. /src/main/resources. Конечно, это не решает вашу проблему, файл создается в другом месте.