Maven и добавление JAR в системную область

У меня есть JAR в моем проекте Android, и я хочу, чтобы он был добавлен в окончательный APK. Хорошо, здесь я иду:

    <dependency>
        <groupId>com.loopj.android.http</groupId>
        <artifactId>android-async-http</artifactId>
        <version>1.3.2</version>
        <type>jar</type>
        <scope>system</scope>
        <systemPath>${project.basedir}/libs/android-async-http-1.3.2.jar</systemPath>
    </dependency>

Но когда я запускаю mvn package, я получаю предупреждение:

[WARNING] Some problems were encountered while building the effective model for **apk:1.0
[WARNING] 'dependencies.dependency.systemPath' for com.loopj.android.http:android-async-http:jar should not point at files within the project directory, ${project.basedir}/libs/android-async-http-1.3.2.jar will be unresolvable by dependent projects @ line 36, column 25

И в последнем APK нет JAR.

Как это исправить?

Ответ 1

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

В любом случае удалите тег <systemPath> из зависимости

Ответ 2

Я не знаю истинной причины, но Maven побуждает разработчиков устанавливать все библиотеки (настраиваемые тоже) в некоторые репозитории maven, поэтому scope:system не очень нравится. Простым обходным путем является использование maven-install-plugin

следует за использованием:

напишите свою зависимость таким образом

<dependency>
    <groupId>com.mylib</groupId>
    <artifactId>mylib-core</artifactId>
    <version>0.0.1</version>
</dependency>

затем добавьте maven-install-plugin

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-install-plugin</artifactId>
    <version>2.5.2</version>
    <executions>
        <execution>
            <id>install-external</id>
            <phase>clean</phase>
            <configuration>
                <file>${basedir}/lib/mylib-core-0.0.1.jar</file>
                <repositoryLayout>default</repositoryLayout>
                <groupId>com.mylib</groupId>
                <artifactId>mylib-core</artifactId>
                <version>0.0.1</version>
                <packaging>jar</packaging>
                <generatePom>true</generatePom>
            </configuration>
            <goals>
                <goal>install-file</goal>
            </goals>
        </execution>
    </executions>
</plugin>

обратите внимание на phase:clean, чтобы установить свою собственную библиотеку в свой репозиторий, вам нужно запустить mvn clean, а затем mvn install

Ответ 3

Системная область была предназначена только для работы с "системными" файлами; файлы, сидящие в определенном месте. Файлы в /usr/lib или ${java.home} (например, tools.jar). Он не был предназначен для поддержки различных файлов .jar в вашем проекте.

Авторы намеренно отказывались работать над расширением pathname, чтобы отговорить вас. В результате в краткосрочной перспективе вы можете использовать install:install-file для установки в локальное репо, а затем в определенный день использовать диспетчер репо для обмена.

Ответ 4

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <includeSystemScope>true</includeSystemScope>
    </configuration>
</plugin>

Попробуйте это.

Ответ 5

Используйте диспетчер репозитория и установите в него такие банки. Это решает ваши проблемы вообще и для всех компьютеров в вашей сети.

Ответ 6

Попробуйте эту конфигурацию. Это сработало для меня:

<plugin>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.4</version>
    <configuration>
        <warSourceDirectory>mywebRoot</warSourceDirectory>
        <warSourceExcludes>source\**,build\**,dist\**,WEB-INF\lib\*,
            WEB-INF\classes\**,build.*
        </warSourceExcludes>
        <webXml>myproject/source/deploiement/web.xml</webXml>
        <webResources>
            <resource>
                <directory>mywebRoot/WEB-INF/lib</directory>
                <targetPath>WEB-INF/lib</targetPath>
                <includes>
                        <include>mySystemJar1.jar.jar</include>
                         <include>mySystemJar2.jar</include>
                   </includes>
            </resource>
        </webResources>
    </configuration>
</plugin>

Ответ 7

mvn install: install-file -DgroupId = com.paic.maven -DartifactId = tplconfig-maven-plugin -Dversion = 1.0 -Dpackaging = jar -Dfile = tplconfig-maven-plugin-1.0.jar -DgeneratePom = true

Установите банку в локальный репозиторий.

Ответ 8

тот же вопрос в моем проекте, когда я использую метку

<dependency>
        <groupId>nl-bi-util</groupId>
        <artifactId>nl-bi-util</artifactId>
        <version>1.0.2</version>
        <scope>system</scope>
        <systemPath>${project.basedir}/lib/nl-bi-util-1.0.2.jar</systemPath>
    </dependency>

Проект демо Springboot.

когда я пытаюсь использовать метод, чтобы добавить этот код в мой файл POM

<configuration>
    <includeSystemScope>true</includeSystemScope>
</configuration>

Это покажет ошибки в моей консоли ide

[WARNING] Some problems were encountered while building the effective model for 
com.newland.bi:fj_site_web:war:0.0.1
[WARNING] 'dependencies.dependency.systemPath' for nl-bi-util:nl-bi-util:jar should 
not point at files within the project directory, ${project.basedir}/lib/nl-bi-util- 
1.0.2.jar will be unresolvable by dependent projects @ line 72, column 25
[WARNING] 
[WARNING] It is highly recommended to fix these problems because they threaten the 
 stability of your build.
[WARNING] 
[WARNING] For this reason, future Maven versions might no longer support building 
such malformed projects.

Есть ли у некоторых народов такая проблема?