文档章节

maven 学习笔记(四)-创建简单的eclipse+maven工程(简单的java项目打包为jar并混淆jar文件)

s
 spring55555
发布于 2015/02/10 17:16
字数 965
阅读 71
收藏 2

    1、按前面例子创建一个简单的java项目

     2、创建项目后,项目结构如下图:

   

     2、pom.xml文件配置内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">


 

<modelVersion>4.0.0</modelVersion>

<groupId>com.special.test</groupId>

<artifactId>simple-test4</artifactId>

<version>0.0.1-SNAPSHOT</version>

<name>simple-test4 - Application</name>

<packaging>jar</packaging>

<dependencies>

<dependency>

<groupId>org.apache.commons</groupId>

<artifactId>lang</artifactId>

<version>2.4</version>

</dependency>

</dependencies>

<properties>

<project.build.name>simple-demo4</project.build.name>

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

</properties>

<build>

<finalName>${project.artifactId}-${project.version}</finalName>

<sourceDirectory>src/main/java</sourceDirectory>

<resources>

<resource>

<directory>${basedir}/src/main/java</directory>

<excludes>

<exclude>**/*.java</exclude>

</excludes>

</resource>

</resources>

<plugins>

<plugin>

<artifactId>maven-compiler-plugin</artifactId>

<version>3.1</version>

<executions>

<execution>

<phase>compile</phase>

</execution>

</executions>

<configuration>

<source>1.6</source>

<target>1.6</target>

<encoding>${project.build.sourceEncoding}</encoding>

</configuration>

</plugin>

<plugin>

<artifactId>maven-source-plugin</artifactId>

<version>2.1</version>

<configuration>

<!-- <finalName>${project.build.name}</finalName> -->

<attach>true</attach>

<encoding>${project.build.sourceEncoding}</encoding>

</configuration>

<executions>

<execution>

<phase>compile</phase>

<goals>

<goal>jar</goal>

</goals>

</execution>

</executions>

</plugin>

<!-- clean插件 -->

<plugin>

<artifactId>maven-clean-plugin</artifactId>

<version>2.4.1</version>

<configuration>

<filesets>

<fileset>

<directory>${project.build.directory}</directory>

</fileset>

</filesets>

</configuration>

</plugin>

<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-jar-plugin</artifactId>

<version>2.3.1</version>

<configuration>

<archive>

<!-- 不把pom.xml打入jar中 -->

<addMavenDescriptor>false</addMavenDescriptor>

<manifestFile>

${basedir}/src/main/META-INF/MANIFEST.MF

</manifestFile>

<manifest>

<!-- <addClasspath>true</addClasspath> <classpathPrefix>lib/</classpathPrefix> -->

</manifest>

</archive>

</configuration>

</plugin>

</plugins>

</build>

<profiles>

<!-- 打包混淆 -->

<profile>

<id>proguard</id>

<activation>

<activeByDefault>true</activeByDefault>

</activation>

<properties>

<project.build.release>false</project.build.release>

<project.build.obfuscate>true</project.build.obfuscate>

</properties>

<build>

<!-- <filters> <filter>src/main/resources/env-debug.properties</filter> 

</filters> -->

<plugins>

<plugin>

<groupId>com.pyx4me</groupId>

<artifactId>proguard-maven-plugin</artifactId>

<version>2.0.4-SONATYPE</version>

<executions>

<execution>

<phase>package</phase>

<goals>

<goal>proguard</goal>

</goals>

</execution>

</executions>

<configuration>

<obfuscate>${project.build.obfuscate}</obfuscate>

<proguardInclude>${basedir}/proguard-project.txt</proguardInclude>

<release>${project.build.release}</release>

<libs>

<!-- <lib>libs/commons-lang-2.4.jar</lib> <lib>libs/commons-lang-2.4.jar</lib> -->

</libs>

</configuration>

</plugin>

</plugins>

</build>

</profile>

<profile>

<!-- 上线发布(不混淆jar) -->

<id>release</id>

<activation>

<activeByDefault>false</activeByDefault>

</activation>

<properties>

<project.build.obfuscate>false</project.build.obfuscate>

<project.build.release>true</project.build.release>

</properties>

<build>

<!-- <filters> <filter>src/main/resources/env-release.properties</filter> 

</filters> -->

<plugins>

</plugins>

</build>

</profile>

</profiles>

</project>



   5、混淆文件配置:proguard-project.txt文件配置内容如下:

# To enable ProGuard in your project, edit project.properties

# to define the proguard.config property as described in that file.

#

# Add project specific ProGuard rules here.

# By default, the flags in this file are appended to flags specified

# in ${sdk.dir}/tools/proguard/proguard-android.txt

# You can edit the include path and order by changing the ProGuard

# include property in project.properties.

#

# For more details, see

#   http://developer.android.com/guide/developing/tools/proguard.html

# Add any project specific keep options here:

# If your project uses WebView with JS, uncomment the following

# and specify the fully qualified class name to the JavaScript interface

# class:

#-keepclassmembers class fqcn.of.javascript.interface.for.webview {

#   public *;

#}

#-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*

# ----------------------------------  

#  通过指定数量的优化能执行  

#  -optimizationpasses n  

# ---------------------------------- 

-optimizationpasses 5

#确定统一的混淆类的成员名称来增加混淆 

-useuniqueclassmembernames

#优化时允许访问并修改有修饰符的类和类的成员   

-allowaccessmodification 

#不优化泛型和反射

-keepattributes Signature

-keepattributes *Annotation*

-renamesourcefileattribute SourceFile

-adaptresourcefilenames **.properties

-adaptresourcefilecontents **.properties,META-INF/MANIFEST.MF,META-INF/LICENSE.txt,META-INF/NOTICE.txt

# ----------------------------------  

#   混淆时不会产生形形色色的类名   

#   -dontusemixedcaseclassnames  

# ---------------------------------- 

-dontusemixedcaseclassnames

#      指定不去忽略非公共的库类  

#  -dontskipnonpubliclibraryclasses  

# ---------------------------------- 

-dontskipnonpubliclibraryclasses

# ----------------------------------  

#       不预校验  

#    -dontpreverify  

# ----------------------------------  

-dontpreverify

 #这1句是屏蔽警告,脚本中把这行注释去掉

-ignorewarnings

# ----------------------------------  

#      输出生成信息  

#       -verbose  

# ----------------------------------  

-verbose  

  

#混淆时应用侵入式重载   

-overloadaggressively   

   

#优化时允许访问并修改有修饰符的类和类的成员   

-allowaccessmodification  

#确定统一的混淆类的成员名称来增加混淆   

-useuniqueclassmembernames  

#优化

#-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*

-keep public class * extends android.app.Activity

-keep public class * extends android.app.Application

-keep public class * extends android.app.Service

-keep public class * extends android.content.BroadcastReceiver

-keep public class * extends android.content.ContentProvider

-keep public class * extends android.app.backup.BackupAgentHelper

-keep public class * extends android.preference.Preference

-keep public class com.android.vending.licensing.ILicensingService

-keep class com.tencent.mm.sdk.openapi.WXMediaMessage {*;}

-keep class com.tencent.mm.sdk.openapi.** implements com.tencent.mm.sdk.openapi.WXMediaMessage$IMediaObject {*;}

#第三分库不混淆

-keep class android.support.v4.** {*;}

-keep class org.apache.http.entity.mime.** {*;}

#使用 gson 需要的配置

-keep class com.google.gson.JsonObject { *; }

#-dontwarn org.apache.commons.validator.**

-keepclasseswithmembers class * {

    public <init>(android.content.Context,android.util.AttributeSet);

}

-keepclasseswithmembers class * {

    public <init>(android.content.Context,android.util.AttributeSet,int);

}

-keepclassmembers class * extends android.app.Activity {

    public void *(android.view.View);

}

-keep class * extends android.os.Parcelable {

    public static final android.os.Parcelable$Creator *;

}

# Keep - Library. Keep all public  classes, fields, and methods.

-keep public class * {

    public <fields>;

    public  <methods>;

}

# Keep - Library. Keep all public and protected classes, fields, and methods.

#-keep public class * {

#   public protected <fields>;

#    public protected <methods>;

#}

# Also keep - Enumerations. Keep the special static methods that are required in

# enumeration classes.

-keepclassmembers enum  * {

    public static **[] values();

    public static ** valueOf(java.lang.String);

}

# Keep names - Native method names. Keep all native class/method names.

-keepclasseswithmembers,allowshrinking class * {

    native <methods>;

}

#加载依赖库

-libraryjars libs/commons-lang-2.4.jar

#-libraryjars libs/commons-validator-1.4.0.jar



   6、运行混淆打包结果如图中目录target:



       6、demo地址下载链接地址如下:

       https://github.com/spring5555/mvn-android-simple-demo3



© 著作权归作者所有

s
粉丝 4
博文 22
码字总数 6375
作品 0
黄浦
程序员
私信 提问
第一个Spring Boot应用

在JavaEE的领域,Spring可以说是占据了半壁江山。但Spring各种复杂的XML配置一直被开发者诟病。 Pivotal在2014年4月发布了SpringBoot的1.0版,到现在已经有3个年头了。其实也不是新东西了。 ...

虾游于海
2017/01/23
0
0
浅谈 java 中构建可执行 jar 包的几种方式

有时候,由于项目的需要,我们会将源码编译后以工具包(class打成jar包)的形式对外提供,此时, 你的 jar 包不一定要是可执行的,只要能通过编译,能被别人以 import 的方式调用就行了。但还...

大数据之路
2013/05/05
7.4K
3
Maven Eclipse使用

Maven是什么 Maven 主要用于Java平台的项目构建,依赖管理,项目信息管理。 Maven可以做什么 完成Java项目的编译,打包构建 jar包依赖管理 自动化单元测试,生成测试报告 Maven 安装 下载最新...

微流
2016/06/21
0
0
SpringBoot 学习:(一)快速搭建项目

一、简介 从 Spring Boot 项目名称中的 Boot 可以看出来,Spring Boot 的作用在于创建和启动新的基于 Spring 框架的项目。它的目的是帮助开发人员很容易的创建出独立运行和产品级别的基于 Sp...

Element0506
2015/07/25
568
0
开发第一个spring boot应用

我们来用spring boot开发一个简单的“hello world”web应用,使用maven构建。开始之前,先检查你的java与maven的版本,看是否是spring boot1.3支持的版本: $ java -versionjava version "1...

柳哥
2015/05/17
17.7K
3

没有更多内容

加载失败,请刷新页面

加载更多

设计模式之访问者模式

定义 Represent an operation to be performed on the elements of an object structure. Visitor lets you define a new operation without changing the classes of the elements on which......

陈年之后是青葱
昨天
9
0
PhotoShop 高级应用 : 分层云彩 - 简单闪电效果

1.创建黑白渐水平渐变图层 2.选择滤镜选项卡: 渲染--->分层云彩功能 3.将滤镜-云彩效果渲染后的图层进行反相操作 【此时出现闪电效果】 6.调整色阶,使得闪电效果更明显 7.创建剪贴蒙版:色...

东方墨天
昨天
9
0
三种实现Android主界面Tab的方式

三种实现Android主界面Tab的方式 https://www.cnblogs.com/caobotao/p/5103673.html

shzwork
昨天
9
0
java8-Optional类

背景 NPE问题,100%的Java程序员都碰到,并且曾经是心中的痛。 1965年英国TonyHoare引入了Null引用,后续的设计语言包括Java都保持了这种设计。 一个例子 业务模型 Person 有车一族, 有Car...

春天springcarter
昨天
11
0
py 登录github时token以及cookie的应用

import requestsfrom bs4 import BeautifulSoup## 获取tokenr1 = requests.get('https://github.com/login')s1 = BeautifulSoup(r1.text,'html.parser')token = s1.find(name='input',......

子枫Eric
昨天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部