如何在没有项目类的情况下创建只包含项目依赖项的Jar文件?

时间:2017-05-21 06:50:06

标签: java gradle

我有一个使用某些依赖项的Java项目,即Commons,HttpClient,SQLite。

我想在Gradle中创建两个构建任务:

  1. 第一个允许我用Commons,HttpClient,Sqlite构建一个Jar文件,没有我的项目,

  2. 第二个允许我单独使用我的项目构建一个Jar文件。这是我猜的默认构建操作行为,所以我已经知道如何做了:)

  3. 我也知道如何用我的项目和依赖项一起创建一个Jar文件("胖jar"),但是生成的Jar文件很大,我的所有依赖项组合在一起(~14mb)。 / p>

    我的问题的原因是我在远程服务器上测试应用程序。我的想法是,我将上传带有依赖关系的'只有偶尔,每隔几天,依赖关系会发生变化,同时上传“应用程序jar”。每一个建设。现在,我每次上传都要等几分钟,我想等几秒钟。

    这可以在Gradle中使用吗?

    这是我当前的gradle配置:

    apply plugin: 'java'
    
    buildscript {
        repositories {
            mavenCentral()
        }
    }
    
    repositories {
        mavenCentral()
    }
    
    task fatjar(type: Jar) {
        from {
            configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
        }
    
        baseName = project.name + "-all"
    
        with jar
    }
    
    compileJava {
        options.encoding = 'UTF-8'
        options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation"
    }
    
    dependencies {
        compile group: 'commons-collections', name: 'commons-collections', version: '3.2.2'
        compile 'org.hjson:hjson:1.0.0'
        compile group: 'commons-cli', name: 'commons-cli', version: '1.3.1'
        compile group: 'commons-io', name: 'commons-io', version: '2.4'
        compile group: 'org.java-websocket', name: 'Java-WebSocket', version: '1.3.0'
        compile group: 'org.apache.httpcomponents', name: 'httpclient', version: '4.5.3'
        compile group: 'org.apache.httpcomponents', name: 'httpcore', version: '4.4.6'
        compile group: 'org.json', name: 'json', version: '20160810'
        compile group: 'org.xerial', name: 'sqlite-jdbc', version: '3.16.1'
        compile group: 'org.zeromq', name: 'jeromq', version: '0.4.0'
        compile group: 'com.nimbusds', name: 'nimbus-jose-jwt', version: '4.23'
        compile group: 'ws.wamp.jawampa', name: 'jawampa-core', version: '0.5.0'
        compile group: 'ws.wamp.jawampa', name: 'jawampa-netty', version: '0.5.0'
    }
    

    编辑:为问题添加了更多上下文。

2 个答案:

答案 0 :(得分:2)

您可以删除

with jar

从您的任务中,这是将项目jar文件的内容包含到fat jar中的内容。请参阅the documentation

答案 1 :(得分:0)

我知道您的问题是关于Gradle的,但是对于那些想要在使用Maven进行此操作的同时找到此页面的人,可以使用以下针对maven-shade-plugin的配置来完成此操作:

<artifactSet>
    <excludes>
        <exclude>${project.groupId}:${project.artifactId}</exclude>
    </excludes>
</artifactSet>