Проект Java с модулями в одном банке - PullRequest
0 голосов
/ 15 сентября 2018

У меня есть проект с именем BigProject.

Структура:

BigProject
-firstModule
 --pom.xml
-secondModule
 --pom.xml
-thirdModule
 --pom.xml
-pom.xml

Я хочу создать уникальный jar с именем BigProject.jar. В настоящий момент, если я делаю чистую установкуЯ вернул банку для каждого модуля.

Можете ли вы объяснить мне, как это сделать?спасибо

Ответы [ 3 ]

0 голосов
/ 15 сентября 2018

Ну, для этого вам нужен собственный загрузчик классов.К счастью, люди уже добавили несколько плагинов, чтобы облегчить вашу жизнь.Вы можете просмотреть задачу Ant jar create jar или цель перепаковки spring-boot - все, что вам удобно.Пример ниже:

<plugin>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-maven-plugin</artifactId>
  <version>2.0.1.RELEASE</version>
  <executions>
    <execution>
      <goals>
        <goal>repackage</goal>
      </goals>
    </execution>
  </executions>
</plugin>
0 голосов
/ 16 сентября 2018

Если вы хотите создать «uber-jar», то есть jar, содержащий (объединяющий) все классы из ваших модулей и их зависимостей (jar, от которых они зависят), одним из способов является использование плагина Maven Shade.

Добавьте еще один модуль в родительский pom, назовите его, например."uberjar", и сделать его зависимым от firstModule, secondModule, thirdModule.Добавьте конфигурацию для плагина Shade в файл pom.xml для этого модуля;затем запуск mvn package приведет к созданию uber jar.

Модуль uberjar можно настроить, как показано в следующем примере:

<project ...>
  <parent>
    <groupId>myproject</groupId>
    <artifactId>parent</artifactId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>

  <artifactId>uberjar</artifactId>

  <dependencies>
    <dependency>
      <groupId>myproject</groupId>
      <artifactId>mod1</artifactId>
      <version>0.0.1-SNAPSHOT</version>
    </dependency>
    <dependency>
      <groupId>myproject</groupId>
      <artifactId>mod2</artifactId>
      <version>0.0.1-SNAPSHOT</version>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>3.2.0</version>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>shade</goal>
            </goals>
            <configuration>
              <transformers>
                <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                  <mainClass>myModule.MyMainClass</mainClass>
                </transformer>
              </transformers>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>
0 голосов
/ 15 сентября 2018

Каждый module-info.java, который находится в пакете по умолчанию , будет скомпилирован в module-info.class.

Следовательно, один JAR не может содержать несколько модулей .

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