Android studio开发J2EE 和 Linux服务器运行jar文件

前言:上层应用开发变化万千,但是静下心来思考,发现大部分的思想都是相通的只是表现形式不同而已!

关于 jar 和 aar?

jar(Java Archive File):java归档文件,是一种压缩文件,是java的一种文档格式。是可执行的文件。
里面包含:.class文件 和 meta-info文件(meta-info文件是我们对这个jar包的一个简单说明比如版本,java版本等等,同时也可以配置J2EE项目的入口类)

aar(Android Archive File):android归档文件,也是一种压缩格式,是Android一种文档格式。
里面通常包含:.class文件、资源文件、R文件、清单配置文件等,其实就是放了和Android项目有关的文件
aar解开后的图片

总之,和我们熟知的ZIP压缩文件是相同的概念,只不过zip是任意文件进行压缩,范围广,而jar和aar可以理解为专业领域内文件归档。

Android studio 开发J2EE项目

1、新建一个java项目
这个比较简单就过了
2、配置

1>java项目的build.gradle中添加,避免java项目中文乱码

 tasks.withType(JavaCompile) {
     options.encoding = "UTF-8"
 }
2>如果是纯java项目在build.gradle配置(为了让这个jar包可以被运行起来):

apply plugin: 'application'
jar {
    manifest {
        attributes 'Main-Class': 'com.test.Hello'//配置java项目执行的入口类
    }
    baseName = 'Demo' //jar包名字
    version =  '1.0' //jar包版本
}

jar{}中的配置实际是写入jar包中的meta-info文件中

3、打出jar包
直接使用Android studio的gradle命令即可或者直接调用菜单功能rebuild project

命令:
gradlew :项目所在的层次结构:assemble
比如:
我的项目就在根目录下
gradlew :test:assemble
我的项目在 根目录/dev下
gradlew :dev:test:assemble

Linux服务器运行jar文件

前提是配置好jdk,不然哪有环境和这个命令啊

直接命令:
java jar xxx.jar

思考:
因为上面的jar{}配置了入口类,写在了meta-info文件里面。所以上面命令一执行,就会去这个文件中找这个jar中的入口类的main方法执行。如果没有在meta-info中配置结果可想而知。

Android studio 中gradle不完美的地方 – 不自动合并jar包和aar包

如果我们java项目引用了第三方的jar包,此时我们打出的jar包是不包含第三方的jar的,这个比较…

如果我们的Android library项目,我们引用其他的Android library项目我们打出的aar包也是不包含其他Android library的。

当然如果是apk的话这些问题都不是问题,都自动搞定了。

目前对java项目引用jar包不合并解决办法: 将引用的jar包解压开,然后将完整包名路径.class文件都整合到一起然后重新打成jar包

比如: 我们将需要的完整包名路径class文件和meta-info放在 /libs目录下

重新打jar包指令

jar -cvfM 输出的jar包名 /libs/

一定要带上参数M,不然重新生成的jar包文件中的meta-info就会被重新生成,对于java项目我们配置的入口类就没有了,丢了jar包就不能执行了。

猜你喜欢

转载自blog.csdn.net/txksnail/article/details/78587403