почему я не могу импортировать maven jar из локального хранилища? - PullRequest
0 голосов
/ 02 марта 2020

demo1 - это проект Springboot, демо-проект тоже проект Springboot. Я пишу Java Class Test. java в demo1:

package com.example.demo1;
public class Test {
    public void test() {
        System.out.println("11111111111111");
    }
}

и устанавливаю его в локальный репозиторий maven:

mvn install:install-file "-DgroupId=com.example" "-DartifactId=demo1" "-Dversion=0.0.1-SNAPSHOT" "-Dpackaging=jar" "-Dfile=target/demo1-0.0.1-SNAPSHOT.jar"

В демо-проекте я создаю зависимость проект demo1, содержимое pom. xml:

<dependency>
        <groupId>com.example</groupId>
        <artifactId>demo1</artifactId>
        <version>0.0.1-SNAPSHOT</version>
</dependency>

, когда я строю демонстрационный проект, произошла ошибка:

mvn clean package

сообщение об ошибке здесь:

com.example.demo1 does not exists
Test cannot find symbol!

Ответы [ 2 ]

2 голосов
/ 02 марта 2020

Возможно, вы используете spring-boot-maven-plugin для создания работоспособного артефакта приложения весенней загрузки. Этот плагин создает артефакт, который действительно имеет расширение * .jar, но на самом деле это вообще не jar: он имеет все зависимости в BOOT-INF/lib, он использует специальные записи в манифесте и так далее. Java (JVM) не может прочитать этот jar, приложение весенней загрузки использует специальный загрузчик классов для чтения этой структуры, которая довольно уникальна для приложений весенней загрузки.

Если вы хотите увидеть, о чем я говорю - просто откройте JAR приложения весенней загрузки с WinRAR / WinZIP или чем-то еще, и вы увидите это сами.

Вот почему в общем случае вы не можете сделать зависимость от приложения с весенней загрузкой.

Теперь, сказав, что есть обходные пути:

  1. Скорее всего, вам не нужно зависеть от целого приложения, а скорее от какого-то "общего" кода - в этом случае рассмотрите возможность рефакторинга его в отдельный модуль и сделайте оба приложения зависимыми от этого модуля.

  2. Используйте Эта ссылка для обхода на уровне конфигураций плагинов в Maven, вы получите дополнительные jar-файлы, которые могут делать то, что вы хотите.

0 голосов
/ 02 марта 2020

Первое решение - вручную добавить JAR-файл в локальный репозиторий Maven с помощью цели Maven install: install-file. Использование плагина очень просто, как показано ниже:

mvn install:install-file -Dfile=<path-to-file>

Обратите внимание, что мы не указали groupId, artifactId, версию и упаковку JAR для установки. Действительно, начиная с версии 2.5 Maven-install-plugin, эта информация может быть взята из опционально указанного pomFile.

Эта информация также может быть предоставлена ​​в командной строке:

mvn install:install-file -Dfile=<path-to-file> -DgroupId=<group-id> -DartifactId=<artifact-id> -Dversion=<version>

Где :

<path-to-file>: Path to the JAR to install
<group-id>: Group id of the JAR to install
<artifact-id>: Artifact id of the JAR to install
<version>:  Version of the JAR

Например:

mvn install:install-file –Dfile=C:\dev\app.jar -DgroupId=com.roufid.tutorials -DartifactId=example-app -Dversion=1.0

Затем вы можете добавить зависимость в ваш проект Maven, добавив эти строки в ваш pom. xml file:

<dependency>
    <groupId>com.roufid.tutorials</groupId>
    <artifactId>example-app</artifactId>
    <version>1.0</version>
</dependency>

используйте maven-install-plugin в вашем pom. xml, который установит флягу во время фазы инициализации Maven. Для этого необходимо указать местоположение банки, которую вы хотите установить. Лучший способ - поместить JAR в папку, созданную в root проекта (в том же каталоге, что и файл pom. xml).

Давайте рассмотрим, что jar находится в / Библиотека / app.jar. Ниже приведена конфигурация maven-install-plugin:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-install-plugin</artifactId>
    <version>2.5</version>
    <executions>
        <execution>
            <phase>initialize</phase>
            <goals>
                <goal>install-file</goal>
            </goals>
            <configuration>
                <groupId>com.roufid.tutorials</groupId>
                <artifactId>example-app</artifactId>
                <version>1.0</version>
                <packaging>jar</packaging>
                <file>${basedir}/lib/app.jar</file>
            </configuration>
        </execution>
    </executions>
</plugin>


`${basedir}` represents the directory containing pom.xml.

При добавлении предыдущих строк вы можете столкнуться с ошибкой, добавьте следующий плагин в ваш проект, чтобы разрешить отображение жизненного цикла:

<pluginManagement>
    <plugins>
        <!--This plugin's configuration is used to store Eclipse m2e settings only. 
            It has no influence on the Maven build itself. -->
        <plugin>
            <groupId>org.eclipse.m2e</groupId>
            <artifactId>lifecycle-mapping</artifactId>
            <version>1.0.0</version>
            <configuration>
                <lifecycleMappingMetadata>
                    <pluginExecutions>
                        <pluginExecution>
                            <pluginExecutionFilter>
                                <groupId>org.codehaus.mojo</groupId>
                                <artifactId>aspectj-maven-plugin</artifactId>
                                <versionRange>[1.0,)</versionRange>
                                <goals>
                                    <goal>test-compile</goal>
                                    <goal>compile</goal>
                                </goals>
                            </pluginExecutionFilter>
                            <action>
                                <execute />
                            </action>
                        </pluginExecution>
                        <pluginExecution>
                            <pluginExecutionFilter>
                                <groupId>
                                    org.apache.maven.plugins
                                </groupId>
                                <artifactId>
                                    maven-install-plugin
                                </artifactId>
                                <versionRange>
                                    [2.5,)
                                </versionRange>
                                <goals>
                                    <goal>install-file</goal>
                                </goals>
                            </pluginExecutionFilter>
                            <action>
                                <execute>
                                    <runOnIncremental>false</runOnIncremental>
                                </execute>
                            </action>
                        </pluginExecution>
                    </pluginExecutions>
                </lifecycleMappingMetadata>
            </configuration>
        </plugin>
    </plugins>
</pluginManagement>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...