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.
Есть ли у некоторых народов такая проблема?