Maven: разработка и выпуск версий для библиотек - PullRequest
3 голосов
/ 23 октября 2011

У меня есть проект, состоящий из 3 библиотек - давайте назовем их 1) РЕБЕНОК, 2) РЕБЕНОК и 3) ВЗРОСЛЫЙ.Lib "CHILD" зависит от "BABY", а "ADULT" зависит от "CHILD".

То, что я хочу сделать, это произвести:

  • версия разработчика, которая имеет все (переходные) зависимости
  • производственная версия, которая создает автономный JAR для каждой библиотеки (встраивание зависимостей)

У меня уже есть профиль dev и профиль release, иЯ знаю, как использовать ProGuard для генерации JAR.

Вопрос в том, как сказать Maven, чтобы все зависимости были указаны в dev и игнорировались (необязательно / предоставлены) в production? * 1018.*

Ответы [ 2 ]

2 голосов
/ 24 октября 2011

Чтобы иметь разные зависимости при разработке для развертывания, вы можете использовать профили maven.

http://maven.apache.org/guides/introduction/introduction-to-profiles.html

Так что при разработке вы бы использовали что-то вроде mvn -Pdev compile

Когда вы говорите «автономная банка», это звучит так, как будто вы имеете в виду банку со всеми зависимостями, слитыми в нее.

Как я могу создать исполняемый JAR с зависимостями, используя Maven?

или http://maven.apache.org/plugins/maven-assembly-plugin/

0 голосов
/ 24 октября 2011

Вот что я использовал в конце концов:

  • Родительский POM определяет профиль release, который конфигурирует proguard plugin (создает один большой JAR) и install plugin (помещает артефакт выпуска в репо).

  • POM lib-baby просто вызывает 2 плагина в разделе <build>.

  • POM lib-child дополнительно указывает профиль dev, в котором определяется зависимость от lib-baby. В профиле выпуска эта зависимость имеет тег optional и включена в большой JAR.

В конце при запуске по умолчанию создаются библиотеки com.company.dev:lib-baby и com.company.dev:lib-child (включая их зависимости).

При запуске с -Prelease создаются библиотеки com.company:lib-baby и com.company:lib-child (автономные библиотеки [БЕЗ каких-либо зависимостей]) - единственным побочным эффектом является то, что артефакты по умолчанию (. * Dev) перезаписываются: (

родитель

<project>
    <groupId>com.company</groupId>
    <artifactId>lib-parent</artifactId>
    <packaging>pom</packaging>

    <modules>
        <module>lib-baby</module>
        <module>lib-child</module>
        <module>lib-adult</module>
    </modules>

    <profiles>
        <profile>
            <id>release</id>
            <activation>
                <property>
                    <name>release</name>
                </property>
            </activation>

            <build>
                <pluginManagement>
                    <plugins>
                        <!-- aggregate to one big jar -->
                        <plugin>
                            <groupId>com.pyx4me</groupId>
                            <artifactId>proguard-maven-plugin</artifactId>
                            <executions>
                                ...
                            </executions>
                            <configuration>
                                <injar>${project.build.finalName}.jar</injar>
                                <outjar>${project.build.finalName}-release.jar</outjar>
                                ....
                            </configuration>
                        </plugin>

                        <!-- install release version of artifact separately (under com.company) -->
                        <plugin>
                            <inherited>true</inherited>
                            <groupId>org.apache.maven.plugins</groupId>
                            <artifactId>maven-install-plugin</artifactId>
                            <executions>
                                <execution>
                                    <id>install-release</id>
                                    <goals>
                                        <goal>install-file</goal>
                                    </goals>
                                    <configuration>
                                        <file>
                                            target/${project.build.finalName}-release.jar
                                        </file>
                                        <groupId>com.company</groupId>
                                        ...
                                    </configuration>
                                </execution>
                            </executions>
                        </plugin>
                    </plugins>
                </pluginManagement>
            </build>
        </profile>
    </profiles>
</project>

Lib-ребенок:

<project>
    <groupId>com.company.dev</groupId>
    <artifactId>lib-baby</artifactId>
    <packaging>jar</packaging>

    <parent>
        <groupId>com.company</groupId>
        <artifactId>lib-parent</artifactId>
    </parent>

    <profiles>    
        <profile>
            <id>release</id>

            <build>
                <plugins>
                    <!-- produces 'lib-baby-release.jar -->
                    <plugin>
                        <groupId>com.pyx4me</groupId>
                        <artifactId>proguard-maven-plugin</artifactId>
                    </plugin>

                    <!-- installs 'lib-baby-release.jar -->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-install-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>install-release</id>
                                <phase>install</phase>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>
</project>

Lib-ребенок:

<project>
    <groupId>com.company.dev</groupId>
    <artifactId>lib-child</artifactId>
    <packaging>jar</packaging>

    <parent>
        <groupId>com.company</groupId>
        <artifactId>lib-parent</artifactId>
    </parent>

    <profiles>
        <profile>
            <id>dev</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>

            <dependencies>
                <dependency>
                    <groupId>com.company.dev</groupId>
                    <artifactId>lib-baby</artifactId>
                </dependency>
            </dependencies>
        </profile>

        <profile>
            <id>release</id>

            <dependencies>
                <dependency>
                    <groupId>com.company.dev</groupId>
                    <artifactId>lib-baby</artifactId>
                    <version>1.0</version>
                    <!-- made optional because will be embedded in standalone jar -->
                    <optional>true</optional>
                </dependency>
            </dependencies>

            <build>
                <plugins>
                    <!-- produces 'lib-child-release.jar -->
                    <plugin>
                        <groupId>com.pyx4me</groupId>
                        <artifactId>proguard-maven-plugin</artifactId>
                        <configuration>
                            <assembly>
                                <inclusions>
                                    <inclusion>
                                        <groupId>com.company.dev</groupId>
                                        <artifactId>lib-baby</artifactId>
                                    </inclusion>
                                </inclusions>
                            </assembly>
                        </configuration>
                    </plugin>

                    <!-- installs 'lib-child-release.jar -->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-install-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>install-release</id>
                                <phase>install</phase>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>
</project>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...