maven вставляет код артефакта зависимости в jar - PullRequest
0 голосов
/ 03 марта 2012

У меня есть мультимодульный проект Maven.У меня есть основной модуль «базовый код», который создает jar всего скомпилированного исходного кода в моем проекте.

У меня есть другой модуль, «исполняемый», который создает исполняемый jar из того же исходного кода.Чтобы избежать дублирования, я хочу получить классы из модуля «базовый код».

Я думал, что все, что мне нужно было сделать, это сделать модуль «базовый код» зависимостью от «исполняемого» модуля, чтобы сделать это.Но я просто получаю пустую банку.Что я делаю неправильно?(мой "исполняемый" пом ниже)

 <project>
<modelVersion>4.0.0</modelVersion>
<parent>
    <groupId>com.myproject/groupId>
    <artifactId>myproject</artifactId>
    <version>1</version>
</parent>
<artifactId>executable</artifactId>
<packaging>jar</packaging>

<dependencies>
    <dependency>
    <groupId>com.myproject/groupId>
        <artifactId>code-base</artifactId>
        <version>1</version>
    </dependency>
</dependencies>
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>2.4</version>
            <configuration>
                <finalName>runnable</finalName>
                <archive>
                    <manifest>
                        <mainClass>com.myproject.Main</mainClass>
                        <addClasspath>true</addClasspath>
                        <classpathPrefix>lib/</classpathPrefix>
                    </manifest>
                </archive>
            </configuration>
        </plugin>
    </plugins>
</build>
</project>

1 Ответ

3 голосов
/ 04 марта 2012

То, что вы ищете, это, вероятно, uber-jar: один файл jar со всеми встроенными зависимостями jar, новая версия maven-assembly-plugin поддерживает это как один из 4 предопределенных дескрипторов, посмотрите здесь .

Попробуйте использовать maven-assembly-plugin и замените ваш maven-jar-plugin следующим образом:

<!-- Create single executable jar with all dependencies unpacked and embedded -->
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <configuration>
      <archive>
        <manifest>
          <mainClass>com.myproject.Main</mainClass>
          <addClasspath>true</addClasspath>
          <classpathPrefix>lib/</classpathPrefix>
        </manifest>
      </archive>
      <descriptorRefs><descriptorRef>jar-with-dependencies</descriptorRef></descriptorRefs>
    </configuration>
    <executions>
      <execution>
        <phase>package</phase>
        <goals><goal>single</goal></goals>
      </execution>
    </executions>
  </plugin>

В качестве альтернативы вы также можете использовать maven-shade-для этого нужен плагин .

Надеюсь, это поможет.

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