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页面导入的类,如常量类,实体类等,需保证类名和变量名都不能混淆

原文地址:https://www.cnblogs.com/g177w/p/10105266.html

时间: 2024-11-08 23:18:50

maven项目打包分析及打包后war包缺少配置文件报错的原因分析,使用progard混淆时配置分析的相关文章

佩特来项目经验小集合(2)___组合查询存储过程,报错 &quot;varchar JBID=&#39;&#39; 转换成数据类型 int 时失败&quot;

今天写一个组合查询的存储过程遇到这样一个问题:在将 varchar 值 'SELECT * FROM View_DLS_WXJD_Customer WHERE 1=1 and JBID ='' 转换成数据类型 int 时失败.错误详情如图所示: 经百度:字符串变量和整型变量连接不能用+连接.于是我采用cast()函数将DLSJB这个整型变量转换成字符串,这样问题就解决了.正确代码如下所示: ALTER PROCEDURE [dbo].[Proc_SH_WXJDList] @DH varchar(

Maven War包 POM配置文件

如何为你的Web程序(war包设定配置文件) 约定 http://maven.apache.org/plugins/maven-war-plugin/examples/adding-filtering-webresources.html 上面链接说了: The default resource directory for all Maven projects is src/main/resources which will end up in target/classes and in WEB-

解决idea中maven项目无法读取src/main/java目录下面的配置文件问题

解决idea中maven项目无法读取src/main/java目录下面的配置文件问题 当我们在maven项目中使用Mybatis的时候,需要给Mybatis配置核心xml文件(MyBatis-Config.xml)和映射文件(XxxMapper.xml),一般我们把映射文件和mapper(也就是dao层)放在同一层目录下. 但是在idea中创建maven项目的时候,会出现无法读取到mapper目录下对应的mapper.xml文件(因为项目在编译java目录下的文件时只会去编译.java文件):以

bug:执行到数据库连接后停止运行,而且不报错的奇怪情况----可能是多方同时访问造成的

数据库运行过程中奇怪停止. 即执行到“database connected ”停止运行,而且不产生任何报错信息 程序反复检查没有问题,折腾半天解决了: 可能是多个客户端操作同一个表格,多方同时操作造成的产生了问题. Eclipse连了数据库操作accounts表,PL/SQL 和sqlplus也对该表进行操作. 发现重启Eclipse,关闭PL/SQL 和sqlplus后(仅保留Eclipse项目内连接操作数据库表). 重新启动程序正常执行,不再出现:执行到数据库连接后停止运行,而且不报错的奇怪

Mysql 升级到 5.6 后插入语句时间字段报错:Incorrect datetime value: &#39;&#39; for column &#39;createtime&#39;

今天部署服务器项目运行,当遇见有时间数据对象的插入和更新操作的时候,就报错,如下: Caused by: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect datetime value: '' for column 'createtime' at row 1 at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2868) at com.mysql.jdbc.My

iOS 用CocoaPods做iOS程序的依赖管理(基于Alcatraz),以及升级Mac 10.11后Xcode的CocoaPods插件报错

创建Podfile文件 1.点击红框, Creat Podfile 2.接着弹出Podfile文件 3.Edit Profile, 下面以添加融云SDK为例: 融云SDK Podfile文件添加如下内容: Podfile Edited 1 也可以这样编辑: 屏幕快照 2015-10-27 上午9.04.47.png "7.0"表示引入的第三方库所支持的最低版本 target "CocoaPodsDemo"是你的目标应用项目 do ... end 是你的作用域 Ins

windows7安装Office 2013后,安装Visio 2013报错:安装程序找不到office.zh-cn

虽然windows 8.1(cn_windows_8.1_professional_vl_with_update_x64_dvd_4050293.iso)是款不错的系统,但是由于我的无线一直不能正常使用且经常出现不能正常更新,还有桌面卡住的几率比之前多太多了等先重回windows7 X64. 我安装的是cn_windows_7_ultimate_with_sp1_x64_dvd_u_677408.iso,使用正常,且之前也是使用的这款很稳定,安装Office 2013(cn_office_pro

MySQL在windows系统中修改datadir路径后无法启动问题,报错1067

windows server2008下如何更改MySQL数据库的目录的帖子已经很多了,这里简单介绍一个步骤,如果不成功请先查看其它帖子. 更改默认的mysql数据库目录 将 C:\Documents and Settings\All Users\Application Data\MySQL\MySQL Server 5.1\data 改到 D:\MysqlData 1. 建立文件夹 D:\MysqlData 2. 停止 mysql 服务,将 "C:\Documents and Settings\

佩特来项目经验小集合(2)___组合查询存储过程,报错 &amp;quot;varchar JBID=&amp;#39;&amp;#39; 转换成数据类型 int 时失败&amp;quot;

今天写一个组合查询的存储过程遇到这样一个问题:在将 varchar 值 'SELECT * FROM View_DLS_WXJD_Customer WHERE 1=1 and JBID ='' 转换成数据类型 int 时失败.错误详情如图所看到的: 经百度:字符串变量和整型变量连接不能用+连接. 于是我採用cast()函数将DLSJB这个整型变量转换成字符串,这样问题就攻克了. 正确代码例如以下所看到的: ALTER PROCEDURE [dbo].[Proc_SH_WXJDList] @DH