常春藤挣扎

时间:2016-04-24 14:41:27

标签: java apache configuration ivy

我目前正在努力使用apache常春藤的conf设置。也许我会解释一下 我想先实现的目标:

  1. 我想要两个配置:compile,runtime
  2. 我想要常春藤解析的每个配置,所有的jar包括传递依赖
  3. 这是我尝试过的事情:

    <configurations>
        <conf name="compile" visibility="public"/>
        <conf name="runtime" visibility="public" extends="compile"/>
    </configurations>
    <dependencies>
        <dependency org="org.apache.ivy" name="ivy" rev="2.4.0" conf="runtime->runtime, compile->compile"/>
    </dependencies>  
    

    但它甚至无法解析: 常春藤文件&#39; ... \ ivy.xml&#39;无法解析:

    可以请某人告诉我如何正确地声明conf设置,以便我可以使用编译或运行时解决并获取包括传递依赖的所有jar(在示例中仅包含常春藤罐)。

    更新

    好的,谢谢你的链接。这使它更清晰,但我仍然坚持。

    我更改了依赖项声明,以便它解析范围内的常春藤罐子&#39;默认&#39;: (我遗漏了&#34; compile-&gt;默认&#34;声明,因为它似乎是一个错误 解析常春藤eclipse插件)

    <dependency org="org.apache.ivy" name="ivy" rev="2.4.0" conf="runtime->default"/>
    

    并使用设置检索罐子(使用常春藤eclipse插件) confs='*' and types='*'

    我得到的只是一个ivy-2.4.0.jar。我期望所有运行时依赖项。我不能确切地说出它们是什么,因为我不理解常春藤的xml文件中的声明(后面会追加整个xml文件):

    <dependency org="org.apache.ant" name="ant" rev="1.7.1" force="true" conf="optional->compile(*),master(*)"/>
    

    以下是我如何理解conf =&#34; runtime-&gt;默认&#34;声明:

    • 将常春藤依赖关系分配给(本地)conf&#39;运行时&#39;
    • 将常春藤依赖关系分配给远程配置&#39;默认&#39;
    • 每当我解析(或检索)conf&#39;运行时&#39;一世 获取所有远程依赖项,包括传递依赖项 对于conf&#39;默认&#39;,作为&#39;默认&#39; conf被声明为

      &#34;远程模块的工件及其所有运行时传递依赖关系&#34; link

    这是我的ivy.xml:

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <ivy-module version="2.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd">
        <info organisation="My Name" module="jaculon.ivy" status="integration">
        </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="public" 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>
        <dependencies>
            <!-- Need ivy to resolve the jars. -->
            <dependency org="org.apache.ivy" name="ivy" rev="2.4.0" conf="runtime->default"/>
        </dependencies>
    
    </ivy-module>
    

    这里是ivy-2.4.0.xml的内容:

    <?xml version="1.0" encoding="UTF-8"?>
    <ivy-module version="2.0" xmlns:m="http://ant.apache.org/ivy/maven">
        <info organisation="org.apache.ivy"
            module="ivy"
            revision="2.4.0"
            status="release"
            publication="20141222174010"
        >
            <description homepage="http://ant.apache.org/ivy/" />
            <m:properties__project.build.sourceEncoding>UTF-8</m:properties__project.build.sourceEncoding>
            <m:properties__organization.logo>http://www.apache.org/images/asf_logo_wide.gif</m:properties__organization.logo>
            <m:properties__distMgmtSnapshotsName>Apache Development Snapshot Repository</m:properties__distMgmtSnapshotsName>
            <m:properties__distMgmtSnapshotsUrl>https://repository.apache.org/content/repositories/snapshots</m:properties__distMgmtSnapshotsUrl>
            <m:maven.plugins>org.apache.maven.plugins__maven-remote-resources-plugin__null|org.apache.maven.plugins__maven-remote-resources-plugin__null</m:maven.plugins>
            <m:properties__sourceReleaseAssemblyDescriptor>source-release</m:properties__sourceReleaseAssemblyDescriptor>
        </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="ivy" type="jar" ext="jar" conf="master"/>
            <artifact name="ivy" type="source" ext="jar" conf="sources" m:classifier="sources"/>
            <artifact name="ivy" type="javadoc" ext="jar" conf="javadoc" m:classifier="javadoc"/>
        </publications>
        <dependencies>
            <dependency org="org.apache.ant" name="ant" rev="1.7.1" force="true" conf="optional->compile(*),master(*)"/>
            <dependency org="org.apache.ant" name="ant-nodeps" rev="1.7.1" force="true" conf="optional->compile(*),master(*)"/>
            <dependency org="org.apache.ant" name="ant-trax" rev="1.7.1" force="true" conf="optional->compile(*),master(*)"/>
            <dependency org="commons-httpclient" name="commons-httpclient" rev="3.0" force="true" conf="optional->compile(*),master(*)"/>
            <dependency org="oro" name="oro" rev="2.0.8" force="true" conf="optional->compile(*),master(*)"/>
            <dependency org="commons-vfs" name="commons-vfs" rev="1.0" force="true" conf="optional->compile(*),master(*)"/>
            <dependency org="com.jcraft" name="jsch" rev="0.1.50" force="true" conf="optional->compile(*),master(*)"/>
            <dependency org="com.jcraft" name="jsch.agentproxy" rev="0.0.6" force="true" conf="optional->compile(*),master(*)"/>
            <dependency org="com.jcraft" name="jsch.agentproxy.connector-factory" rev="0.0.6" force="true" conf="optional->compile(*),master(*)"/>
            <dependency org="com.jcraft" name="jsch.agentproxy.jsch" rev="0.0.6" force="true" conf="optional->compile(*),master(*)"/>
            <dependency org="org.bouncycastle" name="bcpg-jdk14" rev="1.45" force="true" conf="optional->compile(*),master(*)"/>
            <dependency org="org.bouncycastle" name="bcprov-jdk14" rev="1.45" force="true" conf="optional->compile(*),master(*)"/>
            <dependency org="junit" name="junit" rev="3.8.2" force="true" conf="test->runtime(*),master(*)"/>
            <dependency org="commons-lang" name="commons-lang" rev="2.6" force="true" conf="test->runtime(*),master(*)"/>
            <dependency org="org.apache.ant" name="ant-testutil" rev="1.7.0" force="true" conf="test->runtime(*),master(*)">
                <exclude org="*" module="*" name="*" type="*" ext="*" conf="" matcher="exact"/>
            </dependency>
            <dependency org="ant" name="ant-launcher" rev="1.6.2" force="true" conf="test->runtime(*),master(*)">
                <exclude org="*" module="*" name="*" type="*" ext="*" conf="" matcher="exact"/>
            </dependency>
            <dependency org="ant-contrib" name="ant-contrib" rev="1.0b3" force="true" conf="test->runtime(*),master(*)">
                <exclude org="*" module="*" name="*" type="*" ext="*" conf="" matcher="exact"/>
            </dependency>
            <dependency org="xerces" name="xercesImpl" rev="2.6.2" force="true" conf="test->runtime(*),master(*)"/>
            <dependency org="xerces" name="xmlParserAPIs" rev="2.6.2" force="true" conf="test->runtime(*),master(*)"/>
        </dependencies>
    </ivy-module>
    

1 个答案:

答案 0 :(得分:0)

听起来像XML格式化问题。

以下示例演示了常春藤配置如何用于管理单独的&#34;编译&#34;,&#34;运行时&#34;和&#34;测试&#34;类路径: