我认为即使我已经阅读了教程,我也不太了解常春藤的conf
功能。想想我有两个依赖;
我只在编译时需要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>
答案 0 :(得分:0)
配置是一个难以理解的概念。我的建议是为构建中的每个依赖项功能组创建一个。
你正在寻找的是&#34;延伸&#34;属性。它允许成员继承。例如:
<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任务创建了这些文件的相对链接列表,最后是&#34; Class-Path&#34;条目将添加到清单文件中。然后,您将能够按如下方式运行jar:
<java jar="${dist.jar}" fork="yes" maxmemory="400m">
<jvmarg value="-ea"/>
</java>
总之,基本上有两种运行jar的方法。指定classpath和mainclass,或者使用清单中的主类和类路径创建jar。
希望这能解决您的问题。