У меня есть 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.
Как мне это исправить?
Ответы:
Вам нужно будет добавить банку в локальный репозиторий maven. В качестве альтернативы (лучший вариант) укажите правильный репозиторий (если он существует), чтобы он мог быть автоматически загружен maven
В любом случае удалите
<systemPath>
тег из зависимостиисточник
maven install
на каждом компьютере, на котором я хочу собрать этот проект (к сожалению, я не нашел этот JAR в репозиториях). Благодарность! :)Я не знаю настоящей причины, но 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
источник
<phase>process-resources</phase>
вместо<phase>clean</phase>
. Фаза ресурсов процесса выглядит более подходящей для такого сценария, и она всегда вызывается перед фазой компиляции.clean
фазе очень вводит в заблуждение, она не является частью жизненного цикла по умолчанию и искажает смыслclean
. Кроме того, предлагаемое изменение для использования фазы в жизненном цикле по умолчанию (например,validate
илиprocess-resources
) не удастся в ситуации с несколькими модулями, поскольку агрегатор пытается разрешить зависимости до выполнения каких-либо настраиваемых целей для дочерних модулей.<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <includeSystemScope>true</includeSystemScope> </configuration> </plugin>
Попробуй это.
источник
Системная область была разработана только для работы с «системными» файлами; файлы, находящиеся в фиксированном месте. Файлы в
/usr/lib
, или${java.home}
(напримерtools.jar
). Он не предназначен для поддержки различных.jar
файлов в вашем проекте.Авторы намеренно отказались заставить расширения имен файлов работать правильно, чтобы это вас обескуражило. В результате в краткосрочной перспективе вы можете использовать
install:install-file
для установки в локальное репо, а затем когда-нибудь использовать менеджер репо для совместного использования.источник
Используйте менеджер репозитория и установите в него такие jar-файлы. Это решает ваши проблемы вообще и для всех компьютеров в вашей сети.
источник
docker run -d -p 8081:8081 --name nexus sonatype/nexus3
см. На сайте hub.docker.com/r/sonatype/nexus3 .Попробуйте эту конфигурацию. У меня сработало:
<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>
источник
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
Установите банку в локальный репозиторий.
источник
Благодаря Ging3r я получил решение:
Следуй этим шагам:
не используйте в теге зависимости. Используйте следующий тег в зависимостях в файле pom.xml:
<dependency> <groupId>com.netsuite.suitetalk.proxy.v2019_1</groupId> <artifactId>suitetalk-axis-proxy-v2019_1</artifactId> <version>1.0.0</version> </dependency> <dependency> <groupId>com.netsuite.suitetalk.client.v2019_1</groupId> <artifactId>suitetalk-client-v2019_1</artifactId> <version>2.0.0</version> </dependency> <dependency> <groupId>com.netsuite.suitetalk.client.common</groupId> <artifactId>suitetalk-client-common</artifactId> <version>1.0.0</version> </dependency>
используйте следующий код в теге плагинов в файле pom.xml:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-install-plugin</artifactId> <version>2.5.2</version> <executions> <execution> <id>suitetalk-proxy</id> <phase>clean</phase> <configuration> <file>${basedir}/lib/suitetalk-axis-proxy-v2019_1-1.0.0.jar</file> <repositoryLayout>default</repositoryLayout> <groupId>com.netsuite.suitetalk.proxy.v2019_1</groupId> <artifactId>suitetalk-axis-proxy-v2019_1</artifactId> <version>1.0.0</version> <packaging>jar</packaging> <generatePom>true</generatePom> </configuration> <goals> <goal>install-file</goal> </goals> </execution> <execution> <id>suitetalk-client</id> <phase>clean</phase> <configuration> <file>${basedir}/lib/suitetalk-client-v2019_1-2.0.0.jar</file> <repositoryLayout>default</repositoryLayout> <groupId>com.netsuite.suitetalk.client.v2019_1</groupId> <artifactId>suitetalk-client-v2019_1</artifactId> <version>2.0.0</version> <packaging>jar</packaging> <generatePom>true</generatePom> </configuration> <goals> <goal>install-file</goal> </goals> </execution> <execution> <id>suitetalk-client-common</id> <phase>clean</phase> <configuration> <file>${basedir}/lib/suitetalk-client-common-1.0.0.jar</file> <repositoryLayout>default</repositoryLayout> <groupId>com.netsuite.suitetalk.client.common</groupId> <artifactId>suitetalk-client-common</artifactId> <version>1.0.0</version> <packaging>jar</packaging> <generatePom>true</generatePom> </configuration> <goals> <goal>install-file</goal> </goals> </execution> </executions> </plugin>
Я включаю 3 баночки из папки lib:
Наконец, используйте
mvn clean
and thenmvn install
или mvn clean install и просто запустите файл jar из целевой папки или пути, по которому устанавливается (см.mvn install
Журнал):java -jar abc.jar
Примечание: помните одну вещь, если вы работаете с jenkins, тогда сначала используйте,
mvn clean
а затемmvn clean install
команду, работающую за вас, потому что с предыдущим кодомmvn clean install
команда сохраняет кеш для зависимости.источник