Include java libraries into own library

2019-03-06 08:50发布

I created a little framework for myself which I want to use in multiple projects. I also want the distributed jar-file to include all external libraries so that my projects just need to include my library to access all external libraries.

I need this to simplify updating the external libraries.

So I placed this in my build.xml which adds all libraries from dist/lib into my own jar-file.

<target name="-post-jar">  
    <!-- Include all java libraries -->
    <fileset dir="dist/lib" id="extern.libs">
        <include name="*.jar" />
    </fileset>

    <!-- Add the libraries from the fileset to the project.jar -->
    <jar jarfile="${dist.jar}" update="true">  
        <zipgroupfileset refid="extern.libs"/>
    </jar>  
</target>  

But when I try to use external libraries like "org.zkoss.zk.ui.Component" I get the error that this library could not be found.

Is there a better way to include the external libraries into my own library so that my project can use them?

标签: ant java
4条回答
做个烂人
2楼-- · 2019-03-06 09:14

You can use One-jar or Fat Jar. If you use maven you can use maven-assembly plugin.

查看更多
ゆ 、 Hurt°
3楼-- · 2019-03-06 09:20

Depends on IDE...If you are using Eclipse then it is very easy...go to Properties->Build Path and then add library...

查看更多
一夜七次
4楼-- · 2019-03-06 09:27

You can publish a Maven artifact, which users of your framework can then use without having to include the dependencies yourself--your pom is enough.

If you want to create an "all-in-one" artifact, consider something like OneJar or jarjar or Maven's Shade plugin to create a jar that has no external dependencies.

查看更多
Evening l夕情丶
5楼-- · 2019-03-06 09:29

The standard classloader can't find class files inside a jar that is itself inside a jar. You must add every jar to the classpath, and not nest jars.

BTW, it would probably be a bad idea to allow nesting jars: you would end up with 6 or seven versions of commons-lang or log4j into every project, because many libraries depend on them.

查看更多
登录 后发表回答