我认为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>
配置是一个难以理解的概念。我的建议是为构建中的每个功能依赖项组创建一个。
您要查找的是“ 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] 删除。
我来说两句