天天看點

大坑總結(一)

從這篇文章開始,記錄下工作中遇到的大坑及解決方法。

1. 代碼庫中的代碼與線上服務的代碼不一緻(有人修改了代碼不送出!!)

萬幸:代碼在打包時将src檔案打進了target/classes目錄中。

在使用maven compile時,預設是不包含java檔案的,需要在pom檔案中進行配置。配置方法如下:

下面時一個測試代碼的pom.xml檔案,重點關注resources标簽。

<?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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.fan.learn.increase</groupId>
    <artifactId>increaseTest</artifactId>
    <packaging>war</packaging>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>3.2.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.4</version>
        </dependency>
    </dependencies>

    <build>
        <!--resources 解決maven預設編譯時,target目錄中不包含java源檔案的問題,隻包含resources目錄下的檔案和class檔案-->
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <excludes>
                    <exclude>.svn</exclude>
                </excludes>
            </resource>
            <!--有了上面的配置,則預設的resources目錄中的檔案不會被拷貝到target/classes目錄下-->
            <resource>
                <directory>src/main/resources</directory>
            </resource>
        </resources>

        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                    <verbose>true</verbose>
                    <!--<encoding>UTF-8</encoding>-->
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>
           

于是從線上伺服器上拷貝檔案到本地,進行修改、debug。

2.debug時,本地代碼代碼與伺服器上代碼不一緻

明明已經修改了本地代碼,加了一些日志資訊,重新編譯,部署到了伺服器。一方面該列印的日志沒有列印,另一方面在新添加的代碼處添加斷點加不上,總是對不上号。

檢視target/classes目錄下對應的源檔案是否是最新的,結果是剛剛修改後的代碼。

難道沒有給編譯?明明編譯成功了!

使用jd-gui( jd-gui的下載下傳位址 ) 工具檢視編譯出的class檔案與java檔案是否一緻。結果:不一緻!

突然想到源檔案src目錄下有源檔案。原來編譯完之後會将src目錄中的檔案拷貝到classes目錄中,将編譯出的class檔案覆寫了。

删除src目錄下的所有class檔案。這麼多,怎麼删除呢?

轉到src目錄下:

上面的指令解析:

find . -name *.class

在目前目錄下查找以.class為字尾的檔案

xargs rm -rf

對前面find找出的檔案執行删除操作

重新編譯、部署,問題解決!

3.網際網路是個開放的環境,各種字元都可能出現,一定要注意判斷特殊情況,使用好try catch。