Рекомендуемые практики для распространения / использования maven проектов вне жизненного цикла сборки - PullRequest
3 голосов
/ 27 августа 2011

Во многих случаях я не уверен, что лучше всего обрабатывать зависимости для проекта maven.Это при выполнении jar, который является результатом пакета mvn.

Что я попробовалстроит универсальный сосуд).Недостатком является то, что Uber-Jar является слишком массивным.Кроме того, я не могу заставить оттенок maven работать с зависимостями datanucleus, поскольку он что-то испортил.

2) распределить зависимости вместе с jar.

//something like this
$ mvn package dependency:copy-dependencies
$ java -cp target/project.jar:target/dependency com.MyMainClass

создает каталог со всеми зависимостями вместе с jar.

Я бы хотел

3) просто распределить jar иобрабатывать зависимости при выполнении банку.Поскольку пакет mvn помещает pom в папку jars manifest, вся информация там есть, верно?,Теперь, я хотел бы, чтобы была одна однострочная команда, чтобы можно было запустить этот jar с просьбой, чтобы maven управлял зависимостями.Еще более круто, если кто-то знает, может ли такая вещь быть использована в качестве задания hadoop.

1 Ответ

2 голосов
/ 13 января 2012

Я думаю, что в вашем пункте 3 нет решения вопроса.

Мои три варианта, во всех случаях вы можете запустить приложение с простым java -jar target/project.jar. Больше ничего не нужно.

1. Плагин сборки Maven с дескриптором jar-with-dependencies

(манифест в конфигурации фляги здесь пропущен)

<plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>2.2.2</version>
    <configuration>
        <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
    </configuration>
</plugin>

2. Плагин зависимости Maven

Плагин зависимостей Maven, правильно настроенный jar (classpath) и пользовательский дескриптор сборки maven для упаковки всех вместе.

(вы можете упростить это, если ваш проект не использует зависимости моментальных снимков)

<plugin>
    <artifactId>maven-jar-plugin</artifactId>
    <configuration>
        <archive>
            <manifest>
                <addClasspath>true</addClasspath>
                <mainClass>your.package.MainApp</mainClass>
                <packageName>your.package</packageName>
                <classpathLayoutType>custom</classpathLayoutType>
                <customClasspathLayout>lib/$${artifact.artifactId}.$${artifact.extension}/customClasspathLayout>
            </manifest>
        </archive>
    </configuration>
</plugin>
<plugin>
    <artifactId>maven-dependency-plugin</artifactId>
    <executions>
        <execution>
            <id>copy-dependencies</id>
            <phase>package</phase>
            <goals>
                <goal>copy-dependencies</goal>
            </goals>
            <configuration>
                <outputDirectory>${project.build.directory}/lib</outputDirectory>
                <overWriteReleases>true</overWriteReleases>
                <overWriteSnapshots>true</overWriteSnapshots>
                <overWriteIfNewer>true</overWriteIfNewer>
                <excludeScope>test</excludeScope>
                <includeScope>compile</includeScope>
                <stripVersion>true</stripVersion>
            </configuration>
        </execution>
    </executions>
</plugin>

3. Maven One Jar

<plugin>
    <groupId>org.dstovall</groupId>
    <artifactId>onejar-maven-plugin</artifactId>
    <version>1.4.4</version>
    <executions>
        <execution>
            <configuration>
                <attachToBuild>true</attachToBuild>
            </configuration>
            <goals>
                <goal>one-jar</goal>
            </goals>
        </execution>
    </executions>
</plugin>
...