Maven: развертывание локального проекта на удаленном сервере с зависимостями - PullRequest
0 голосов
/ 04 мая 2019

Я знаю, что это может звучать очень нубистски, и я прошу прощения за это.

Мой вопрос прост:

Я разработал проект локально, он содержит много внешних зависимостей, которые упоминаются в файле pom.xml. Когда я развертываю на удаленном сервере с помощью mvn deploy, развертывается только jar приложения, но не его зависимости.

Таким образом, я получаю сообщение java.lang.NoClassDefFoundError, когда пытаюсь выполнить свою программу на удаленном сервере.

Что мне нужно сделать, чтобы сделать эту работу должным образом?

РЕДАКТИРОВАТЬ: Я бы предпочел не заканчивать с массивным сумо jar со всеми зависимостями в нем. Я бы предпочел экспортировать зависимости отдельно на удаленный сервер (если это имеет смысл)

РЕДАКТИРОВАТЬ 2: Есть ли способ "Mavenize" удаленного сервера и выполнить поиск Maven Dependency непосредственно оттуда? И только развернуть мой «настоящий» jar, когда я обновлю код?

Я посмотрю на maven-dependency-plugin с зависимостью : copy-dependencies mojo. Выглядит интересно.

Ниже моего pom.xml: jar-with-dependencies не работал (я, должно быть, что-то пропустил)

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com</groupId>
<artifactId>zylon</artifactId>
<version>HBaseConnect</version>
<name>BaseConnect</name>

<dependencies>  
    (...)               
</dependencies>  

    <distributionManagement>
        <repository>
            <id>ssh-repository</id>
            <url>scpexe://remote.server/cloud/repo</url>
         </repository>
     </distributionManagement>

      <build>     
      <plugins>       
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>zylon.myMainClass</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>

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

        </plugins>

        <extensions>
          <extension>
            <groupId>org.apache.maven.wagon</groupId>
             <artifactId>wagon-ssh-external</artifactId>
             <version>1.0-beta-6</version>
          </extension>
        </extensions>

      </build>
</project>

Плагин Shade ниже работал, хотя, но это приводит к массивному файлу Jar.

             <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>3.2.1</version>
                <executions>
                  <execution>
                    <phase>package</phase>
                    <goals>
                      <goal>shade</goal>
                    </goals>
                    <configuration>
                      <artifactSet>
                        <excludes>
                          <exclude>classworlds:classworlds</exclude>
                          <exclude>junit:junit</exclude>
                          <exclude>jmock:*</exclude>
                          <exclude>*:xml-apis</exclude>
                          <exclude>org.apache.maven:lib:tests</exclude>
                        </excludes>
                      </artifactSet>
                    </configuration>
                  </execution>
                </executions>
              </plugin>

1 Ответ

2 голосов
/ 04 мая 2019

Этого можно добиться, используя maven-assembly-plugin и настроив его для использования дескриптора jar-with-dependencies.

Вы можете найти примеры и более подробную информацию об этом здесь

РЕДАКТИРОВАТЬ : Убедитесь, что вы определили цель выполнения для вашего плагина и правильно вызвали такую ​​цель; либо по:

  1. Указание полностью определенной цели mvn groupId:artifactId:version:goal (вы можете проверить, как сократить эту ссылку здесь )

ИЛИ

  1. Прикрепление цели к желаемой фазе мавена (например, package). В вашем конкретном случае:
   <project>
      [...]
      <build>
        [...]
        <plugins>
          <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>3.1.1</version>
            <configuration>
              <descriptorRefs>
                <descriptorRef>jar-with-dependencies</descriptorRef>
              </descriptorRefs>
            </configuration>
            <executions>
              <execution>
                <id>make-assembly</id> <!-- this is used for inheritance merges -->
                <phase>package</phase> <!-- bind to the packaging phase -->
                <goals>
                  <goal>single</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
          [...]
    </project>

Как показано в исходной ссылке, которую я прикрепил (https://maven.apache.org/plugins/maven-assembly-plugin/usage.html)

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