Создайте два файла с ушами: один с включенной защитой, другой с выключенной - PullRequest
1 голос
/ 13 октября 2011

У меня есть EAR-файл, который я создаю с помощью maven, он состоит из нескольких проектов, в том числе одного проекта war-файла.Мне нужно, чтобы при сборке создавались два идентичных файла ear, за исключением того, что в файле war отключены настройки kerberos.Чтобы отключить эти настройки, мне просто нужно закомментировать раздел web.xml.

Каков наилучший способ сделать это с Maven?Я бы предпочел не создавать новый проект, который является дубликатом, но с другим файлом web.xml.Я предпочел бы иметь какой-то способ иметь два файла web.xml в проекте war-файла и выбирать сборку, которую использовать для какого файла ear.Кто-нибудь может подсказать, как это сделать?

1 Ответ

1 голос
/ 13 октября 2011

Решение 1

Вы можете использовать комбинацию профилей и конфигурацию maven-war-plugin.В POM проекта WAR определите активированный по умолчанию профиль и один явно активированный, таким образом они будут взаимоисключающими (если у вас не определены другие профили, но вам нужно будет только запомнить себя, чтобы активировать один или другой):

<profiles>
    <profile>
        <id>security</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties>
            <web.xml.properties>security.properties</web.xml.properties>
        </properties>
    </profile>
    <profile>
        <id>no-security</id>
        <properties>
            <web.xml.properties>no-security.properties</web.xml.properties>
        </properties>
    </profile>
</profiles>

Затем в разделе сборки определите соответствующую фильтрацию:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <configuration>
                <filters>
                    <filter>${web.xml.filter}</filter>
                </filters>
                <webResources>
                    <resource>
                        <directory>WebContent/WEB-INF</directory>
                        <filtering>true</filtering>
                        <targetPath>WEB-INF</targetPath>
                    </resource>
                </webResources>
            </configuration>
        </plugin>
    </plugins>
</build>

Измените web.xml так, чтобы в переменном месте у вас был маркер шаблона, например ${security.fragment}. Finally, add two property files security.properties and no-security.properties`:

# file: security.properties
security.fragment=<your_security_config>...</your_security_config>

# file: no-security.properties
security.fragment=

Вызывать Maven либо с -P no-security или -P security, либо без -P.Конец.

Решение 2

Это не использует фильтрацию, но 2 отдельных web.xml с.Это немного хуже, так как он повторяет код.

Определите профили, как в решении 1, но установите другое свойство: расположение web.xml в вашем проекте.Используйте это свойство в разделе <build>, чтобы указать его плагину maven-war:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <configuration>
                <webXml>${web.xml.location}</webXml>
            </configuration>
        </plugin>
    </plugins>
</build>

На самом деле, я боролся с ним в своем проекте, когда писал это.Я выбрал второе решение, так как метод с фильтрацией ресурсов плохо работает с плагином m2eclipse.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...