Maven并将JAR添加到系统范围
我在我的Android项目中有一个JAR,我希望它被添加到最终的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。
我如何解决这个问题?
你需要将jar添加到你的本地maven仓库。 另外(更好的select)指定适当的存储库(如果存在),所以它可以自动下载maven
在任何一种情况下,从依赖关系中删除<systemPath>
标记
我不知道真正的原因,但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
系统范围仅用于处理“系统”文件; 坐在一些固定位置的文件。 /usr/lib
或${java.home}
(例如tools.jar
)。 它不是为了支持项目中的杂项.jar
文件而devise的。
作者故意拒绝使path名扩展正确地工作,以阻止你。 因此,在短期内,您可以使用install:install-file
安装到本地仓库,然后有一天使用仓库pipe理器进行分享。
使用资源库pipe理器并将其安装到其中。 这为您的networking中的所有计算机解决了您的问题。
试试这个configuration。 它为我工作:
<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
将jar安装到本地存储库。
- Maven project.build.directory
- 'parent.relativePath'指向我的com.mycompany:MyProject而不是org.apache:apache – 为什么?
- IntelliJ新build项目 – maven原型列表为空
- 指定Maven的本地存储库位置作为CLI参数
- 强制Intellij IDEA重新读取所有的Maven依赖关系
- Maven:运行maven时打开zip文件时出错
- 为什么modelVersion的pom.xml是必要的,并始终设置为4.0.0?
- 是否有可能在一个POM中执行两个不同的maven exec-maven-plugin
- M2_HOME和MAVEN_HOME有什么区别?