<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Bryan

      BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
      37 Posts :: 3 Stories :: 24 Comments :: 0 Trackbacks
    Most often, we need to build runnable jars for java library, and I go though several solutions, including shadow, and most of them process the dependencies as classes files in jar file which is not what we expected. and what we want are the runnable jar which includes user classes filles as well as all the dependencies jars in jar format. but in this way , we need extra classloader to load the jar libs in jar files and the following has provided the way of doing it.

    and I go though some most importance web pages and found three solutions for it.

    1. Eclipse jarinjarloader https://github.com/raisercostin/eclipse-jarinjarloader

    apply plugin: 'java'
    apply plugin: 'eclipse'
     
    sourceCompatibility = 1.6
    targetCompatibility = 1.6
    version = "4.3.3"

    processResources{
        exclude '**'
    }

    repositories {
        
    //jcenter()
        
    //maven { url "http://clojars.org/repo" }
    }

    dependencies {
        compile files('lib/jlibs-core.jar')
        compile files('lib/jlibs-xml.jar')
        compile files('lib/autonomyPiB.jar')
    }

    //add Class-Path to manifest
    task addDependToManifest {
        doFirst{        
            
    if (!configurations.runtime.isEmpty()) {         
                jar.manifest.attributes('Rsrc-Class-Path'"./ lib/" + configurations.runtime.collect { it.name }.join(' lib/'))
            }
        }
    }
    jar.dependsOn += addDependToManifest
     
    //copy libs to output/mylibs/lib folder
    task copyDependencies(type: Copy) {
        from configurations.runtime
        destinationDir = file('build/mylibs/lib')
    }
    jar.dependsOn += copyDependencies

    jar{
        
    //include contents of output dir
        from "build/mylibs"
        
        from zipTree("lib/jar-in-jar-loader.zip")
        manifest {
            attributes 'Implementation-Title': project.name,
                
    'Class-Path''.',
                
    'Rsrc-Main-Class''com.test.TestA',
                
    'Main-Class''org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader'
        }
    }


    2. spring boot gradle plugin

    we can also use spring boot gradle plugin to build our runnable jars.

    apply plugin: 'java'
    apply plugin: 'eclipse'

    //setting up spring boot gradle plugin which is used for building runnable jars
    buildscript {
        repositories {
            maven { url 'https://repo.spring.io/libs-milestone' }
        }

        dependencies {
            classpath 'org.springframework.boot:spring-boot-gradle-plugin:1.5.4.RELEASE'
        }
    }

    apply plugin: 'org.springframework.boot'
     
    sourceCompatibility = 1.6
    targetCompatibility = 1.6
    //version = "4.3.3" 

    tasks.withType(JavaCompile) {
        options.bootClasspath = "$JDK6_HOME/jre/lib/rt.jar"
    }

    if (project.hasProperty('env')) {
        println "Target environment: $env"
        sourceSets.main.resources.srcDir "src/main/profile/$env"
    }

    processResources{
        exclude 'TagNames.properties'
    }
     
    repositories {
        
    //jcenter()
        
    //maven { url "http://clojars.org/repo" }
    }
     
    dependencies {
        compile files('lib/jlibs-core.jar')
        compile files('lib/jlibs-xml.jar')
        compile files('lib/autonomyPiB.jar')
    }

    bootRepackage {
        mainClass = 'com.test.TestA'
    }


    3. the one-jar plugin in https://github.com/rholder/gradle-one-jar and this way also works, but if we upgrade to gradle 4.0+ we need to change the OneJar.groovy writeOneJarManifestFile as some function is deprecated.

        File writeOneJarManifestFile(Manifest manifest) {
     
            File manifestFile = File.createTempFile("one-jar-manifest", ".mf")
            manifestFile.deleteOnExit()
            manifest.attributes.put("Main-Class", "com.simontuffs.onejar.Boot")
            manifest.attributes.put("One-Jar-Main-Class", mainClass)
            manifest.attributes.put("One-Jar-Show-Expand", showExpand)
            manifest.attributes.put("One-Jar-Confirm-Expand", confirmExpand)
            manifest.writeTo(manifestFile)
            
            return manifestFile
       }


    //create a runnable jar with all the dependencies using one-jar "gradle aweSomeFunJar"

    apply plugin: 'java'
    apply plugin: 'eclipse'

    buildscript {
        repositories {
            mavenCentral()
        }
        dependencies {
            classpath 'com.github.rholder:gradle-one-jar:1.0.4'
        }
    }
    apply plugin: 'gradle-one-jar'
     
    sourceCompatibility = 1.6
    targetCompatibility = 1.6
    version = "4.3.3" 

    processResources{
        exclude 'TagNames.properties'
    }
     
    repositories {
        
    //jcenter()
        
    //maven { url "http://clojars.org/repo" }
    }

    configurations{
        fatJarBuild
    }
     
    dependencies {

        compile files('lib/jlibs-core.jar')
        compile files('lib/jlibs-xml.jar')
        compile files('lib/autonomyPiB.jar')
        
        fatJarBuild files('lib/jlibs-core.jar')
        fatJarBuild files('lib/jlibs-xml.jar')
        fatJarBuild files('lib/autonomyPiB.jar')
    }

    task awesomeFunJar(type: OneJar) {
      mainClass 'com.test.TestA'
    }

    and I found for the first solution, the runnable jar can read external properties(properties in the same folder as the jar) and for other solution we can only include all our properties in the jar files.

    ----------------------JarInJarLoader Manifest---------------------------
    Manifest-Version: 1.0
    Implementation-Title: dataProcessing
    Rsrc-Class-Path: ./ lib/jlibs-core.jar lib/jlibs-xml.jar lib/autonomyP
     iB.jar
    Class-Path: .
    Rsrc-Main-Class: com.test.TestA
    Main-Class: org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader

    ---------------------- spring boot gradle plugin Manifest---------------------------
    Manifest-Version: 1.0
    Start-Class: com.test.TestA
    Spring-Boot-Classes: .;BOOT-INF/classes/
    Spring-Boot-Lib: BOOT-INF/lib/
    Spring-Boot-Version: 1.5.4.RELEASE
    Main-Class: org.springframework.boot.loader.JarLauncher

    ----------------------One Jar Manifest---------------------------
    Manifest-Version: 1.0
    Ant-Version: Apache Ant 1.9.6
    Created-By: 1.8.0_101-b13 (Oracle Corporation)
    One-Jar-Confirm-Expand: false
    One-Jar-Show-Expand: false
    Main-Class: com.simontuffs.onejar.Boot
    One-Jar-Main-Class: com.test.TestA

    posted on 2017-06-20 19:25 Life is no respector of any genius. 閱讀(592) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導航:
     
    主站蜘蛛池模板: 一级做α爱过程免费视频| 三根一起会坏掉的好痛免费三级全黄的视频在线观看 | 在线亚洲高清揄拍自拍一品区 | 久久精品国产亚洲av影院| 91手机看片国产永久免费| 鲁啊鲁在线视频免费播放| 久久被窝电影亚洲爽爽爽| 皇色在线视频免费网站| 免费福利在线观看| 亚洲精品视频在线观看视频| 永久黄网站色视频免费观看| 国产免费拔擦拔擦8X高清在线人| 亚洲免费一级视频| 免费va人成视频网站全| 久久久久久毛片免费播放| 国产成人久久精品亚洲小说| 亚洲黄色网址大全| 亚洲成?v人片天堂网无码| 永久黄色免费网站| 一个人看的www在线免费视频| 亚洲国产美女在线观看| 国产亚洲精品a在线观看 | 国产亚洲精品a在线无码| 女人被男人桶得好爽免费视频| free哆拍拍免费永久视频| 亚洲1234区乱码| 亚洲精品无码鲁网中文电影| 永久黄网站色视频免费直播| 日本卡1卡2卡三卡免费| 国产亚洲美女精品久久| 亚洲美女视频一区二区三区| 色噜噜AV亚洲色一区二区| 免费看的一级毛片| 精品无码国产污污污免费网站 | 国产极品美女高潮抽搐免费网站| 性xxxx视频免费播放直播| 成年大片免费高清在线看黄| 亚洲熟妇久久精品| 亚洲成人免费网站| 亚洲AV无码码潮喷在线观看 | 亚洲女女女同性video|