Tengo un JAR en mi proyecto de Android y quiero que se agregue al APK final. De acuerdo, aquí voy:
<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>
Pero cuando estoy corriendo mvn package
, recibo una advertencia:
[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
Y en el APK final no hay JAR.
¿Cómo arreglo eso?
Respuestas:
Deberá agregar el jar a su repositorio local de maven. Alternativamente (mejor opción) especifique el repositorio adecuado (si existe) para que pueda ser descargado automáticamente por maven
En cualquier caso, elimine la
<systemPath>
etiqueta de la dependenciafuente
maven install
en todas las computadoras en las que quiero construir ese proyecto (desafortunadamente no encontré este JAR en repositorios). ¡Gracias! :)No sé la verdadera razón, pero Maven empuja a los desarrolladores a instalar todas las bibliotecas (también personalizadas) en algunos repositorios de Maven, por
scope:system
lo que no es del agrado.maven-install-plugin
seguir el uso:
escribe tu dependencia de esta manera
<dependency> <groupId>com.mylib</groupId> <artifactId>mylib-core</artifactId> <version>0.0.1</version> </dependency>
luego, agregue 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>
preste atención
phase:clean
, para instalar su biblioteca personalizada en su repositorio, debe ejecutarmvn clean
y luegomvn install
fuente
<phase>process-resources</phase>
lugar de<phase>clean</phase>
. La fase de recursos del proceso parece más apropiada para tal escenario y siempre se llama antes de la fase de compilación.clean
fase es muy engañosa, no forma parte del ciclo de vida predeterminado y distorsiona el significado declean
. Además, el cambio sugerido para usar una fase en el ciclo de vida predeterminado (por ejemplo,validate
oprocess-resources
) fallará en una situación de varios módulos, ya que el agregador intenta la resolución de dependencias, antes de que se ejecuten los objetivos personalizados para los módulos secundarios.<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <includeSystemScope>true</includeSystemScope> </configuration> </plugin>
Prueba esto.
fuente
El alcance del sistema solo se diseñó para tratar con archivos del 'sistema'; archivos que se encuentran en una ubicación fija. Archivos en
/usr/lib
, o${java.home}
(ptools.jar
. Ej .). No fue diseñado para admitir.jar
archivos varios en su proyecto.Los autores se negaron intencionalmente a que las expansiones de nombres de ruta funcionen correctamente para desanimarlo. Como resultado, a corto plazo puede usar
install:install-file
para instalar en el repositorio local, y luego algún día usar un administrador de repositorios para compartir.fuente
Utilice un administrador de repositorio e instale este tipo de archivos jar en él. Eso resuelve sus problemas en absoluto y para todas las computadoras en su red.
fuente
docker run -d -p 8081:8081 --name nexus sonatype/nexus3
: consulte hub.docker.com/r/sonatype/nexus3 para obtener detalles.Prueba esta configuración. Funcionó para mí:
<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>
fuente
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
Instale el jar en el repositorio local.
fuente
Gracias a Ging3r obtuve la solución:
sigue estos pasos:
no lo use en la etiqueta de dependencia. Use lo siguiente en la etiqueta de dependencias en el archivo 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>
use el siguiente código en la etiqueta de complementos en el archivo 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>
Estoy incluyendo 3 frascos de la carpeta lib:
Finalmente, use
mvn clean
y luegomvn install
o 'mvn clean install' y simplemente ejecute el archivo jar desde la carpeta de destino o la ruta donde se instala (vermvn install
registro):java -jar abc.jar
nota: Recuerde una cosa si está trabajando en jenkins, primero use
mvn clean
y luego elmvn clean install
comando funcione para usted porque con el código anterior, elmvn clean install
comando almacena el caché para la dependencia.fuente