ANT:包含库和许可证问题的方法

ANT:包含库和许可证问题的方法,ant,classpath,Ant,Classpath,我一直在尝试使用Ant来编译并准备发布一个项目。在我最终能够解决的过程中,我遇到了几个问题,但解决方案让我非常不满意。首先,让我解释一下项目的设置及其依赖关系 我有一个项目,让我们称之为Primary,它依赖于几个库,比如神奇的Guava。它还取决于我的另一个项目,我们称之为次要项目。辅助项目还具有一些依赖项,例如,JDOM2。我已经在主目录中引用了我用Ant构建的Jar 让我为您介绍一下build.xml中有趣的部分,这样您就可以了解我在做什么: <project name="Prima

我一直在尝试使用
Ant
来编译并准备发布一个项目。在我最终能够解决的过程中,我遇到了几个问题,但解决方案让我非常不满意。首先,让我解释一下项目的设置及其依赖关系

我有一个项目,让我们称之为Primary,它依赖于几个库,比如神奇的
Guava
。它还取决于我的另一个项目,我们称之为次要项目。辅助项目还具有一些依赖项,例如,
JDOM2
。我已经在主目录中引用了我用
Ant
构建的
Jar

让我为您介绍一下
build.xml
中有趣的部分,这样您就可以了解我在做什么:

<project name="Primary" default="all" basedir=".">  
    <property name='build' location='dist' />
    <property name='application.version' value='1.0'/>
    <property name='application.name' value='Primary'/>
    <property name='distribution' value='${application.name}-${application.version}'/>

    <path id='compile.classpath'>
        <fileset dir='libs'>
            <include name='*.jar'/>
        </fileset>
    </path>

    <target name='compile' description='Compile source files.'>
        <javac includeantruntime="false" srcdir="src" destdir="bin">   
            <classpath refid='compile.classpath'/>
        </javac>
    <target> 

    <target name='jar' description='Create a jar file for distribution.' depends="compile">
        <jar destfile='${build}/${distribution}.jar'>
            <fileset dir="bin"/>
            <zipgroupfileset dir="libs" includes="*.jar"/>
        </jar>
    </target>
在我让它正常工作之后,我花了很多时间试图不将依赖项作为类文件而是作为
Jar
s包含,我没有时间或洞察力回去尝试找出我做错了什么。此外,我认为将这些库包含为类文件是一种不好的做法,因为这可能会导致许可问题,而不打包它们,仅仅将它们包含在构建
Jar
的目录中很可能不会(如果是这样,您可以选择不自己分发它们)


我认为我无法正确组装类路径,在启动第二个
Jar
时,我总是收到主项目中类或库的
NoClassDefFoundError
,这是因为我对
Ant
不是很有经验。我是否需要为这两个项目指定类路径?将类路径指定为
应该允许我简单地将所有依赖项添加到与Secondary的
Jar
相同的文件夹中,如果不是这样的话?

您可以使用MANIFEST.MF“class path:”交叉引用您的Jar。 如果它们都在同一个目录中,可能会按如下方式工作(在两个项目中都使用它!):


)可以处理子目录的

如果你打算使用越来越多的图书馆,你可能想仔细看看常春藤甚至maven

<target name='jar' description='Create a jar file for distribution.' depends="compile">
    <jar destfile='${dist}/${distribution}.jar' basedir="${build}" >    
        <fileset dir="${build}"/>
        <zipgroupfileset dir="libs" includes="*.jar"/>
        <manifest>
            <attribute name="Main-Class" value="lu.tudor.ssi.kiss.climate.ClimateChange"/>
        </manifest>
    </jar>      
</target>
<target name='jar' description='Create a jar file for distribution.' depends="compile">
    <pathconvert property="manifest.classpath" pathsep=" ">
         <path refid="compile.classpath" />
         <flattenmapper />
    </pathconvert>
    <jar destfile='${build}/${distribution}.jar'>
        <fileset dir="bin"/>
        <manifest>
            <attribute name="Class-Path" value="${manifest.classpath}"/>
        </manifest>
    </jar>
</target>