2018-07-18


maven

maven 报错

Unknown lifecycle phase “–version”. You must specify a valid lifecycle pid>:[:]:. Available lifecycle phases a-resources, process-resources, compile, process-classes, generate-test-sources, , test-compile, process-test-classes, test, prepare-package, package, pre-integr deploy, pre-clean, clean, post-clean, pre-site, site, post-site, site-deploy.

  • 解决办法:

第一步:mvn install 第二步:mvn compiler:compile 第三步:mvn org.apache.maven.plugins:maven-compiler-plugin:compile 第四步:mvn org.apache.maven.plugins:maven-compiler-plugin:2.0.2:compile

建立项目

file->new->project->Maven->Create from archetype->org.apache.maven.archetypes:maven-archetype-quickstart

  • 父子项目:

在父项目中新建一个maven项目,并将父项目中的src文件删除。

  • pom.xml 文件配置如下,即可以生成可执行jar包。
<build>
  <sourceDirectory>src/main/java</sourceDirectory>
  <finalName>test4</finalName><!--你的jar文件的名字-->
  <plugins>
    <plugin>
      <artifactId>maven-assembly-plugin</artifactId>
      <configuration>
        <appendAssemblyId>false</appendAssemblyId>
        <descriptorRefs>
          <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
        <archive>
          <manifest>
            <mainClass>com.hand.App</mainClass><!--你的程序的入口文件名,含有main文件的java文件-->
          </manifest>
        </archive>
      </configuration>
      <executions>
        <execution>
          <id>make-assembly</id>
          <phase>package</phase>
          <goals>
            <goal>assembly</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>
  • build.sh文件,实现打包,运行的功能:
cd sub1
mvn install
java -jar target/sub1.jar
cd ..
cd sub2
mvn install
...

package、install、deploy的联系与区别

  • package命令完成了项目编译、单元测试、打包功能,但没有把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库和远程maven私服仓库
  • install命令完成了项目编译、单元测试、打包功能,同时把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库,但没有布署到远程maven私服仓库
  • deploy命令完成了项目编译、单元测试、打包功能,同时把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库和远程maven私服仓库  

java

方法参数的使用情况

  • 一个方法不能修改一个基本数据类型的参数(即布尔型或数值型)。
  • 一个方法可以改变一个对象参数的状态。
  • 一个方法不能让对象参数引用一个新的对象。

静态导入

import static java.lang.System.out;
println("hello world");

阻止继承:final类和方法

  • 类中的特定方法被声明为final后,子类就不能覆盖这个方法。final类中所有的方法自动成为final方法,但不包括域。对于final域来说,构造对象之后就不允许改变它们的值了。
  • String类也是final类。

强制类型转换

将一个子类的引用赋给一个超类的变量,编译器是允许的。 将一个超类的引用赋给一个子类的变量,必须进行类型转换。 用instanceof 判断能否成功转换:

if (a instanceof b){   ... ...    }

抽象类

  • 抽象类不能被实例化。
  • 类即使不含抽象方法,也可以将类声明为抽象类。
  • 可以定义一个抽象类的对象变量,但它只能引用非抽象子类的对象。

equals判断两个对象是否相等

class Employee extends Person{
    private double salary;
    private LocalDate hireDay;
    ...
    public boolean equals(Object otherObject){
        // java 核心技术 卷1 P68-169
        // 检测是否引用同一个对象
        if (this == otherObject) return true;
        if (otherObject == null) return false;
        // 检测是否属于同一个类
        // getClass 返回一个对象所属的类
        if (getClass() != otherObject.getClass()) return false;
        Employee other = (Employee) otherObject;
        return name.equals(other.name) && salary == other.salary && hireDay.equals(other.hireDay);
    }
}
class Manage extends Employee{
    private double bonus;
    ...
    @Override
    public boolean equals(Object otherObject) {
        if (! super.equals(otherObject)) return false;
        Manage other = (Manage)otherObject;
        return bonus == other.bonus;
    }
}

lambda 表达式

  • 对于只有一个抽象方法的接口,需要这种接口对象时,就可以提供一个lanbda表达式——函数式接口。
  • 不能把lambda表达式赋给类型为Object的变量,Object不是一个函数式接口。

java.util.function

  • BiFunction,描述了参数类型为T和U而且返回类型为R的函数。
BiFunction<String,String,Integer> comp
    = (first,second) -> first.length() - second.length();