Ответы пользователя по тегу Apache Maven
  • Как можно с помощью мавена подменить класс в jar'ке?

    formatko
    @formatko
    Java developer
    Сделал через antrun plugin.
    Для продакш профиля все действо происходит в модуле ear.
    <!--Патчим сериализаторы в jar'ках ear'ки для продакш сборки-->
                        <plugin>
                            <groupId>org.apache.maven.plugins</groupId>
                            <artifactId>maven-antrun-plugin</artifactId>
                            <version>1.6</version>
                            <executions>
                                <execution>
                                    <id>repack</id>
                                    <phase>package</phase>
                                    <goals>
                                        <goal>run</goal>
                                    </goals>
                                    <configuration>
                                        <target>
                                            <!--разархивируем в спец папку-->
                                            <unzip src="${project.build.directory}/ear${releasePostfix}/lib/gwt-user-${gwt.version}.jar"
                                                   dest="${project.build.directory}/ant/user"/>
                                            <unzip src="${project.build.directory}/ear${releasePostfix}/lib/gwt-servlet-${gwt.version}.jar"
                                                   dest="${project.build.directory}/ant/servlet"/>
                                            <unzip src="${project.build.directory}/ear${releasePostfix}/lib/iask-api-web-${version}.jar"
                                                   dest="${project.build.directory}/ant/apiweb"/>
    
                                            <!--заменяем нужные классы-->
                                            <copy file="${project.build.directory}/ant/apiweb/com/google/gwt/user/client/rpc/core/java/sql/Date_CustomFieldSerializer.class"
                                                  todir="${project.build.directory}/ant/user/com/google/gwt/user/client/rpc/core/java/sql/"
                                                  overwrite="true"/>
    
                                            <copy file="${project.build.directory}/ant/apiweb/com/google/gwt/user/client/rpc/core/java/sql/Date_CustomFieldSerializer.class"
                                                  todir="${project.build.directory}/ant/servlet/com/google/gwt/user/client/rpc/core/java/sql/"
                                                  overwrite="true"/>
    
                                            <!--собираем в джарки обратно-->
                                            <zip basedir="${project.build.directory}/ant/user"
                                                 destfile="${project.build.directory}/ant/toEar/lib/gwt-user-${gwt.version}.jar"
                                                 update="true"/>
                                            <zip basedir="${project.build.directory}/ant/servlet"
                                                 destfile="${project.build.directory}/ant/toEar/lib/gwt-servlet-${gwt.version}.jar"
                                                 update="true"/>
    
                                            <!--обновление еарки-->
                                            <zip basedir="${project.build.directory}/ant/toEar/"
                                                 destfile="${project.build.directory}/ear${releasePostfix}.ear"
                                                 update="true"/>
    
                                            <delete dir="${project.build.directory}/ant"/>
                                        </target>
                                    </configuration>
                                </execution>
                            </executions>
                        </plugin>


    Для девмода замена присходит обычным способом - создание в таком же path такого же файла (com/google/gwt/user/client/rpc/core/java/sql/Date_CustomFieldSerializer.class) и так как джарки gwt попадают в war приложения то ручной замены не требуется. А для продакшн режима джарки поставляются через provided и переопределиться кодом не могут, приходится в ручную распаковывать заменять.
    Возможно есть и более изящный способ)
    Ответ написан
  • Как работают смежные профили maven?

    formatko
    @formatko
    Java developer
    Частично нашел ответ на вопрос:
    Можно указать по умолчанию в остальных модулях
    <profiles>
            <profile>
                <id>prod</id>
                <activation>
                    <activeByDefault>true</activeByDefault>
                </activation>
    .....


    А в нужном модуле prod2, для остальных сработает prod, а для нужного prod2.
    Ответ написан