<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. 閱讀(593) 評論(0)  編輯  收藏

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


    網(wǎng)站導航:
     
    主站蜘蛛池模板: 97在线免费视频| 免费人成再在线观看网站| 风间由美在线亚洲一区| 免费无码肉片在线观看| 亚洲精品视频在线播放| 四虎影视成人永久免费观看视频 | 在线观看免费播放av片| 亚洲一区二区三区AV无码 | 91精品成人免费国产| 亚洲AV伊人久久青青草原| 免费无码一区二区| 国产日产亚洲系列最新| 九九九精品视频免费| 亚洲一区AV无码少妇电影☆| 国产在线精品观看免费观看| 亚洲Av永久无码精品三区在线| 久久精品私人影院免费看| 亚洲综合色一区二区三区小说| 67194熟妇在线永久免费观看| 久久久久精品国产亚洲AV无码| 女人18毛片特级一级免费视频| 亚洲AV成人无码网天堂| 亚洲一区二区高清| 中文字幕无码免费久久| 亚洲一区中文字幕在线观看| 男人的好免费观看在线视频| 亚洲成av人片不卡无码| 亚洲精品美女久久久久9999| 小日子的在线观看免费| 亚洲国产精品综合一区在线| 亚洲日韩国产精品乱| 免费无码一区二区三区| 亚洲色大成网站www永久网站| 国产成人综合亚洲AV第一页 | 国产亚洲精品拍拍拍拍拍| 久久一区二区免费播放| 亚洲理论片中文字幕电影| 日本高清免费不卡在线| 中国一级特黄的片子免费| 亚洲码在线中文在线观看| 四虎永久免费地址在线观看|