<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)站導航:
     
    主站蜘蛛池模板: 亚洲妇熟XXXX妇色黄| 久久免费观看国产精品88av| 77777_亚洲午夜久久多人| 亚洲片国产一区一级在线观看 | 哒哒哒免费视频观看在线www| 91成人免费观看| GOGOGO免费观看国语| 国产91成人精品亚洲精品| 亚洲人成在久久综合网站| 亚洲丝袜美腿视频| 国产亚洲av片在线观看16女人| 亚洲AV无码乱码精品国产| 狼友av永久网站免费观看| 日韩毛片免费无码无毒视频观看| 人妻无码一区二区三区免费| 精品亚洲永久免费精品| 二个人看的www免费视频| 人与动性xxxxx免费| 免费在线观看一区| 美女视频黄频a免费| 日韩国产欧美亚洲v片| 亚洲中文无码卡通动漫野外| 亚洲mv国产精品mv日本mv| 亚洲成人在线免费观看| 亚洲国色天香视频| 亚洲中文字幕久在线| 亚洲一区二区三区久久久久| 亚洲午夜国产精品| 亚洲中文字幕日本无线码| 亚洲1区1区3区4区产品乱码芒果 | 国产午夜成人免费看片无遮挡| 久久精品成人免费观看97| 国产精品免费久久久久久久久| 一区二区三区免费电影| 亚洲视频在线免费| 久久免费视频一区| 日韩视频免费在线观看| 最近免费最新高清中文字幕韩国| 国产92成人精品视频免费| 成人免费视频88| 国产大片91精品免费观看男同|