Guice 3.0的常春藤文件包含guice-3.0-no_aop.jar
。由于我正在创建一个Android应用程序,我想配置我的常春藤文件以使用该jar而不是guice-3.0.jar
。
<ivy-module version="1.0">
<info organisation="com.myapp.android" module="appname"/>
<dependencies>
<!-- other dependencies -->
<dependency org="org.roboguice" name="roboguice" rev="2.0"
transitive="false" />
<dependency org="com.google.inject" name="guice" rev="3.0"
transitive="false">
<artifact name="guice-3.0-no_aop" type="jar" />
</dependency>
</dependencies>
</ivy-module>
当我使用上述配置及其派生时,我收到此错误或类似错误:
Some projects fail to be resolved
Impossible to resolve dependencies of com.mystuff.android#myapp;working@computer
download failed: com.google.inject#guice;3.0!guice-3.0-no_aop.jar
我的配置有什么问题?我应该如何配置我的依赖项以使用
guice-3.0-no_aop.jar
?
修改
为了清楚起见,我尝试以最简单的方式配置Guice 3.0:
<dependency org="com.google.inject" name="guice" rev="3.0"
transitive="false">
不幸的是,这会导致常春藤只使用guice-3.0.jar
。我需要将其配置为使用已下载但未使用的guice-3.0-no_aop.jar
。
修改
这里要求的是Guice 3.0的ivy.xml的内容:
<?xml version="1.0" encoding="UTF-8"?>
<ivy-module version="2.0" xmlns:m="http://ant.apache.org/ivy/maven">
<info organisation="com.google.inject"
module="guice"
revision="3.0"
status="release"
publication="20110325121947"
>
<description homepage="" />
<m:properties__guice.with.no_aop>true</m:properties__guice.with.no_aop>
<m:properties__project.build.sourceEncoding>UTF-8</m:properties__project.build.sourceEncoding>
<m:properties__guice.api.version>1.3</m:properties__guice.api.version>
<m:properties__cglib.version>2.2.1-v20090111</m:properties__cglib.version>
<m:properties__guice.with.jarjar>true</m:properties__guice.with.jarjar>
<m:maven.plugins>null__maven-remote-resources-plugin__null|org.codehaus.mojo__animal-sniffer-maven-plugin__null|null__maven-surefire-plugin__null|org.apache.felix__maven-bundle-plugin__null|null__maven-jar-plugin__null</m:maven.plugins>
</info>
<configurations>
<conf name="default" visibility="public" description="runtime dependencies and master artifact can be used with this conf" extends="runtime,master"/>
<conf name="master" visibility="public" description="contains only the artifact published by this module itself, with no transitive dependencies"/>
<conf name="compile" visibility="public" description="this is the default scope, used if none is specified. Compile dependencies are available in all classpaths."/>
<conf name="provided" visibility="public" description="this is much like compile, but indicates you expect the JDK or a container to provide it. It is only available on the compilation classpath, and is not transitive."/>
<conf name="runtime" visibility="public" description="this scope indicates that the dependency is not required for compilation, but is for execution. It is in the runtime and test classpaths, but not the compile classpath." extends="compile"/>
<conf name="test" visibility="private" description="this scope indicates that the dependency is not required for normal use of the application, and is only available for the test compilation and execution phases." extends="runtime"/>
<conf name="system" visibility="public" description="this scope is similar to provided except that you have to provide the JAR which contains it explicitly. The artifact is always available and is not looked up in a repository."/>
<conf name="sources" visibility="public" description="this configuration contains the source artifact of this module, if any."/>
<conf name="javadoc" visibility="public" description="this configuration contains the javadoc artifact of this module, if any."/>
<conf name="optional" visibility="public" description="contains all optional dependencies"/>
</configurations>
<publications>
<artifact name="guice" type="jar" ext="jar" conf="master"/>
<artifact name="guice" type="source" ext="jar" conf="sources" m:classifier="sources"/>
<artifact name="guice" type="javadoc" ext="jar" conf="javadoc" m:classifier="javadoc"/>
</publications>
<dependencies>
<dependency org="javax.inject" name="javax.inject" rev="1" force="true" conf="compile->compile(*),master(*);runtime->runtime(*)"/>
<dependency org="aopalliance" name="aopalliance" rev="1.0" force="true" conf="compile->compile(*),master(*);runtime->runtime(*)"/>
<dependency org="org.sonatype.sisu.inject" name="cglib" rev="2.2.1-v20090111" force="true" conf="compile->compile(*),master(*);runtime->runtime(*)"/>
<dependency org="javax.inject" name="javax.inject-tck" rev="1" force="true" conf="test->runtime(*),master(*)"/>
<dependency org="org.springframework" name="spring-beans" rev="3.0.5.RELEASE" force="true" conf="test->runtime(*),master(*)"/>
<dependency org="biz.aQute" name="bnd" rev="0.0.384" force="true" conf="test->runtime(*),master(*)"/>
<dependency org="org.apache.felix" name="org.apache.felix.framework" rev="3.0.5" force="true" conf="test->runtime(*),master(*)"/>
<dependency org="org.testng" name="testng" rev="5.11" force="true" conf="test->runtime(*),master(*)">
<artifact name="testng" type="jar" ext="jar" conf="" m:classifier="jdk15"/>
</dependency>
</dependencies>
</ivy-module>
答案 0 :(得分:0)
似乎常春藤文件包含一些maven属性,其中一个说:
<m:properties__guice.with.no_aop>true</m:properties__guice.with.no_aop>
所以这个神器已经没有了。
所以你可以省略:
<artifact name="guice-3.0-no_aop" type="jar" />
并解决guice:
<dependency org="com.google.inject" name="guice" rev="3.0"
transitive="false"/>
答案 1 :(得分:0)
在浏览了大量帖子以及大量的反复试验后,我得到了这个工作:
<dependency org="com.google.inject" name="guice" rev="3.0">
<artifact name="guice" m:classifier="no_aop" type="jar" />
</dependency>
您可以使用AOP检查下载的文件大小以确认它小于默认jar。此外,您可以更改检索模式以包含可选的分类器属性,因此您将更改文件名:
<ivy:retrieve
pattern="lib/[artifact]-[revision](-[classifier]).[ext]" />
相关的SO问题How to dowload multiple Maven dependencies in Ivy with different classifiers?