常春藤的conf属性用法错误

赫万

我认为conf即使阅读了本教程,我也不太了解常春藤功能。考虑一下我有两个依赖关系;

  • 番石榴
  • foeu.jar

foeu.jar只需要guava.jar编译时,但不仅需要编译时,而且还需要运行时。为了实现这些需求,我在ivy.xml中写道;

<configurations defaultconfmapping="runtime->compile">
    <conf   name="default" 
            visibility="public" />

    <conf   name="compile"      
            visibility="private"/>

    <conf   name="runtime"      
            extends="compile"   
            visibility="public"/>
</configurations>

并且,依赖为;

<dependencies>          
    <dependency org="Google Guava"  name="guava-17.0"   rev="17.0"  
                conf="runtime->default"/>
    <dependency org="Foeu"  name="foeu" rev="5.5.1" 
                conf="compile->default"/>
</dependencies>

的确,conf我的理解有些错误有什么问题,我该怎么办?

更新:

在build.xml中,我像这样使用它;

常春藤初始化

<target name="init-ivy" description="Initialize ivy requirements">
    <property   name="ivy.dep.file"     value="${script.directory}/ivy/ivy.xml" />

    <ivy:configure  file="${script.directory}/ivy/ivyconf.xml"/>

    <ivy:resolve/>
    <ivy:cachepath  pathid="ivy.compile.path"    conf="compile" />
    <ivy:cachepath  pathid="ivy.runtime.path" conf="runtime" />
</target>

编译

<target name="compile"  depends="init-ivy"  description="Compiling Java source codes with external libraries">
    <javac  compiler="javac1.7"
            destdir="${class.directory}"
            source="1.7"
            target="1.7"
            failonerror="true"
            includeantruntime="false">

            <src    path="${source.directory}" />
            <classpath  refid="ivy.compile.path" />

    </javac>
</target>

<target name="create-jar"   depends="compile"   description="Creating jar files">
    <jar    destfile="${build.directory}/jar/${ant.project.name}.jar"
        basedir="${class.directory}">

        <manifest>
            <attribute name="Main-Class" value="dataScience.management.Management"/>    
        </manifest>
    </jar>
</target>

<target name="runtime"  depends="create-jar"    description="Running Java based application">
        <java   jar="${jar.directory}/${ant.project.name}.jar"
                fork="yes"  
                maxmemory="400m">
                <jvmarg value="-ea"/>
                <classpath  refid="ivy.runtime.path" />
        </java>
</target>
马克·奥康纳

配置是一个难以理解的概念。我的建议是为构建中的每个功能依赖项组创建一个。

您要查找的是“ extends”属性。它启用成员资格继承。例如:

<configurations>
    <conf name="compile" description="Libraries needed for compilation" />
    <conf name="runtime" extends="compile" description="Libraries needed at runtime"/>
</configurations>

这样,所有编译依赖项都自动成为运行时配置的一部分。

有关更详细的示例,请查看以下答案:

更新

这不是常春藤的问题。可执行jar需要清单文件中包含主类类路径。

如下构建您的jar文件:

  <target name="build" depends="compile">
    <ivy:retrieve pattern="${dist.dir}/lib/[artifact].[ext]" conf="runtime"/>

    <manifestclasspath property="jar.classpath" jarfile="${dist.jar}">
      <classpath>
        <fileset dir="${dist.dir}/lib" includes="*.jar"/>
      </classpath>
    </manifestclasspath>

    <jar destfile="${dist.jar}" basedir="${build.dir}/classes">
      <manifest>
        <attribute name="Main-Class" value="${dist.main.class}"/>
        <attribute name="Class-Path" value="${jar.classpath}"/>
      </manifest>
    </jar>
  </target>

常春藤检索任务使用运行时依赖项填充本地目录。manifestclasspath任务创建到这些文件的相对链接的列表,最后将“ Class-Path”条目添加到清单文件中。然后,您将能够按照以下方式运行jar:

<java jar="${dist.jar}" fork="yes" maxmemory="400m">
        <jvmarg value="-ea"/>
</java>

总之,运行jar基本上有两种方法。指定classpath和mainclass或在清单中创建带有main class和classpath的jar。

希望这能解决您的问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章