maven项目打包分析及打包后war包缺少配置文件报错的原因分析,使用progard混淆时配置分析
1.maven打包:
一直以来我都没太注意过在myeclipse下使用run as来clean居然对项目的target目录没有进行操作,要让操作有效,需要进入到maven build...选项下,进行clean,然后再使用process resources来加入配置文件,再使用compile--》package来打包,同时,值得注意的是,maven在进行打包时默认只把java文件打包进war,如果在非资源路径下,有配置文件,如mybits的mapper.xml文件,需要在maven里边指定一下,否则打包会失败。

<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
<include>**/*.tld</include>
</includes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
<include>**/*.tld</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
tips:一般如果不特别指定,maven项目在打包后会改变项目名称,如你的项目原来叫test,打包后会变成test0.0.1-SNAPSHOT,看起来很不爽,为了解决这一问题,需要加入如下配置:
<artifactId>test</artifactId>
<build>
<finalName>test</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.1.1</version>
<configuration>
<packagingExcludes>WEB-INF/web.xml</packagingExcludes>
</configuration>
</plugin>
</plugins>
</build>
2.progard混淆配置部分:
<plugin>
<groupId>com.github.wvengen</groupId>
<artifactId>proguard-maven-plugin</artifactId>
<version>2.0.11</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>proguard</goal>
</goals>
</execution>
</executions>
<configuration>
<attach>true</attach>
<obfuscate>true</obfuscate>
<attachArtifactClassifier>pg</attachArtifactClassifier>
<options>
<option>-target 1.8</option>
<option>-dontshrink</option>
<option>-dontoptimize</option>
<option>-dontskipnonpubliclibraryclasses</option>
<option>-dontskipnonpubliclibraryclassmembers</option>
<option>-dontusemixedcaseclassnames</option>
<option>-allowaccessmodification</option>
<option>-useuniqueclassmembernames</option>
<option>-keeppackagenames</option>
<option>-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LocalVariable*Table,*Annotation*,Synthetic,EnclosingMethod</option>
<option>-keepclassmembers public class * {void set*(***);*** get*();}</option>
<!--原生servlet都是通过方法名调用接口的,所以,得保留类名和方法名 -->
<option>-keep class **.list.servlet.**{*;}</option>
<option>-keep class **.zxf.servlet.**{*;}</option>
<option>-keep class **.controller.**</option>
<!-- dao层接口的类名和方法不混淆 -->
<option>-keep class **.dao.**{ <methods>; }</option>
<!-- 不混淆实体类的方法和属性,因为在配置文件中有引用-->
<option>-keep class **.domain.** {*;}</option>
<!-- 不混淆jsp页面引入的类和属性 -->
<option>-keep class com.lum.interface_util.** {*;}</option>
<option>-keep class com.java.zxf.util.ShowString {*;}</option>
</options>
<outjar>classes-autotest.jar</outjar>
<libs>
<lib>${java.home}/lib/rt.jar</lib>
</libs>
<injar>classes</injar>
<outputDirectory>${project.build.directory}</outputDirectory>
</configuration>
</plugin>
3.混淆说明:你在混淆前,需要仔细分析你的项目,看看那些是必须保持类名不变的,那些是类名可以变,方法名可以变的,那些是可以随意变的,只有在搞清楚这些之后,你的混淆工作才是有保障的,即即实现了混淆,也保证了代码的可执行性,混淆结果截图如下:


反编译后的效果:

5.总结:个人分析得出不能混淆的类主要有这些:①在web.xml里边配置的servlet,那么servlet的名称和方法名都不能进行混淆;②与数据库有交互的,主要包括实体类,dao层(这种是通过mapper.xml形式写的sql);③在jsp页面导入的类,如常量类,实体类等,需保证类名和变量名都不能混淆
maven项目打包分析及打包后war包缺少配置文件报错的原因分析,使用progard混淆时配置分析的更多相关文章
- idea maven项目要想正常编译成war包,需要做的处理
以及右键项目 - Build(第一次打包成war) (第一次Build) - ReBuild(非第一次打包成war)(非第一次Build) 按照顺序做一到几次,就可以成功编译成war包了(如果rebu ...
- Maven将依赖包、jar/war包及配置文件输出到指定目录
使用Maven插件将依赖包 jar包 war包及配置文件输出到指定目录 写在前面 最近遇到一个朋友遇到一个项目需要将 maven 的依赖包和配置文件分开打包然后用脚本执行程序.这样的好处在于可以随 ...
- Maven War包 POM配置文件
如何为你的Web程序(war包设定配置文件) 约定 http://maven.apache.org/plugins/maven-war-plugin/examples/adding-filtering ...
- 解决idea中maven项目无法读取src/main/java目录下面的配置文件问题
解决idea中maven项目无法读取src/main/java目录下面的配置文件问题 当我们在maven项目中使用Mybatis的时候,需要给Mybatis配置核心xml文件(MyBatis-Conf ...
- bug:执行到数据库连接后停止运行,而且不报错的奇怪情况----可能是多方同时访问造成的
数据库运行过程中奇怪停止. 即执行到“database connected ”停止运行,而且不产生任何报错信息 程序反复检查没有问题,折腾半天解决了: 可能是多个客户端操作同一个表格,多方同时操作造成 ...
- MySQL在windows系统中修改datadir路径后无法启动问题,报错1067
windows server2008下如何更改MySQL数据库的目录的帖子已经很多了,这里简单介绍一个步骤,如果不成功请先查看其它帖子. 更改默认的mysql数据库目录 将 C:\Documents ...
- 通俗易懂地解决中文乱码问题(2) --- 分析解决Mysql插入移动端表情符报错 ‘incorrect string value: '\xF0...
原文:[原创]通俗易懂地解决中文乱码问题(2) --- 分析解决Mysql插入移动端表情符报错 'incorrect string value: '\xF0... 这篇blog重点在解决问题,如果你对 ...
- 备库搭建后,进入备库报错psql: FATAL: the database system is starting up
备库搭建后,进入备库报错psql: FATAL: the database system is starting up 原因:备库配置文件没有hot_standby = on mast ...
- 【GitLab】gitlab上配置webhook后,点击测试报错:Requests to the local network are not allowed
gitlab上配置webhook后,点击测试报错: Requests to the local network are not allowed 操作如下: 报错: 错误原因: gitlab 10.6 ...
随机推荐
- Struts2 - 表单的重复提交问题
用户重复提交表单在某些场合将会造成非常严重的后果.例如,在使用信用卡进行在线支付的时候,如果服务器的响应速度太慢,用户有可能会多次点击提交按钮,而这可能导致那张信用卡上的金额被消费了多次.因此,重复提 ...
- CH5103 [NOIP2008]传纸条[线性DP]
给定一个 N*M 的矩阵A,每个格子中有一个整数.现在需要找到两条从左上角 (1,1) 到右下角 (N,M) 的路径,路径上的每一步只能向右或向下走.路径经过的格子中的数会被取走.两条路径不能经过同一 ...
- QE名词解释以及相关文章链接
百科: http://baike.baidu.com/link?url=ho-aUG2rZwgjx75rwFu5b3XoQnsuJMj9GrJEuaZxnakg19ofO13mrXCMi9_JZ_VY ...
- [转]JS的内存泄露处理
问题: 1.给DOM对象添加的属性是一个对象的引用.范例: var MyObject = {}; document.getElementByIdx_x('myDiv').myProp = MyObje ...
- Python:easygui的安装、导入、使用、设置
转于:https://blog.csdn.net/sinat_37390744/article/details/55211652 博主:钏的博客 一.下载安装 1)下载0.96的easygui.htt ...
- flume+kafka+storm+mysql架构设计
前段时间学习了storm,最近刚开blog,就把这些资料放上来供大家参考. 这个框架用的组件基本都是最新稳定版本,flume-ng1.4+kafka0.8+storm0.9+mysql (项目是mav ...
- Entity Framework Code-First(15):Cascade Delete
Cascade Delete in Entity Framework Code-First: Cascade delete automatically deletes dependent record ...
- jeecms 评论相关
html WEB-INF-t-cms-www-gyxrmyy-content news.html 内容详情页 inc_comment_input.html 评论输入框 inc_comment_list ...
- 阿里云 Ubuntu 服务器 安装 pymssql
我是按照官方的说明文档: http://www.pymssql.org/en/stable/intro.html#getting-started 一步一步操作的,但是没有成功,在网上搜索了很多信息,最 ...
- 【Android-stdio-appdemo搭建记录】
1-如何删除存在的工程 2-创建Android项目 next设置app兼容最低版本:api15--android 4.0以上 创建活动页面 设置活动页面的名称 创建成功项目以后会有最基本的layout ...