maven 의 optional 과 provided 의 차이, deploy 팁

27712 단어 shell
optional 과 provided
  • 서문
  • scope provided
  • optional
  • 총화
  • 머리말
    필 자 는 프레임 워 크 jar 를 쓸 때 일부 의존 은 jar 에서 인용 되 지 않 아 도 된다 는 것 을 발견 했다. 예 를 들 어 tomcat 는 완전한 tomcat 독립 응용 을 사용 하면 Spring boot web 는 의존 도 를 제거 해 야 한다.그리고 필 자 는 항상 다른 프레임 워 크 jar 가 쓴 규범 에 맞지 않 는 jar 를 제외 하고 jar 자체 가 의존 해 야 할 다른 jar 를 도입 해 야 합 니 다. 그러나 다른 jar 제공 능력 이 필요 하거나 일부분 만 인용 해 야 합 니 다. 이것 이 바로 provided 와 optional 입 니 다.
    scope provided
    demo, spring boot 를 예 로 들 어 우리 가 독립 된 tomcat 용 기 를 사용 하여 운행 한다 고 가정 합 니 다.
    <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
                <version>2.2.4.RELEASE</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-starter-tomcat</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-tomcat</artifactId>
                <version>2.2.4.RELEASE</version>
                <scope>provided</scope>
            </dependency>
    

    이 때 는 독립 된 tomcat 가 웹 용 기 를 제공 하 는 능력 입 니 다. spring - boot - starter - tomcat 는 컴 파일 테스트 에서 만 사용 되 며 전달 성 이 없습니다. 이 기능 은 독립 된 tomcat 에서 제공 합 니 다.scope
  • copile 은 기본 값 을 쓰 지 않 았 습 니 다. 즉, 전달 성 이 있 고 의존 하 는 jar 도 인용 되 며 프로젝트 에 따라 계속 존재 합 니 다.
  • provided 위 에서 상세 하 게 말 했 는데 전달 성 이 없고 기능 은 다른 모듈 에서 제공 되 며 자주 사용 된다.
  • runtime 은 JDBC 와 같은 실행 과 테스트 에서 만 작 동 합 니 다.
  • test 는 테스트 시 테스트 에 만 사 용 됩 니 다.
  • system maven 은 reposcory 에서 끌 어 올 리 지 않 고 특정한 경 로 를 설정 해 야 합 니 다.

  • optional
    optional 은 scope 의 범주 가 아니 라 단독 태그 입 니 다.선택 할 수 있 음 을 나타 낸다. 즉, n 가지 능력 을 제공 하 는 것 이다. 업 무 는 한 가지 능력 만 사용 할 수 있 고 업무 가 스스로 어떤 의존 을 선택 할 지 결정 할 수 있 으 며 반드시 업무 에 의존 을 추가 해 야 한다. 그렇지 않 으 면 기능 을 제공 할 수 없다.예 를 들 어 log, log 는 보통 그 중의 한 가지 만 있 으 면 되 고 업무 가 실제 에 따라 결정 된다.
    <dependency>
          <groupId>ognl</groupId>
          <artifactId>ognl</artifactId>
          <version>3.2.12</version>
          <scope>compile</scope>
          <optional>true</optional>
        </dependency>
        <dependency>
          <groupId>org.javassist</groupId>
          <artifactId>javassist</artifactId>
          <version>3.26.0-GA</version>
          <scope>compile</scope>
          <optional>true</optional>
        </dependency>
        <dependency>
          <groupId>org.slf4j</groupId>
          <artifactId>slf4j-api</artifactId>
          <version>1.7.30</version>
          <optional>true</optional>
        </dependency>
        <dependency>
          <groupId>org.slf4j</groupId>
          <artifactId>slf4j-log4j12</artifactId>
          <version>1.7.30</version>
          <optional>true</optional>
        </dependency>
        <dependency>
          <groupId>log4j</groupId>
          <artifactId>log4j</artifactId>
          <version>1.2.17</version>
          <optional>true</optional>
        </dependency>
        <dependency>
          <groupId>org.apache.logging.log4j</groupId>
          <artifactId>log4j-core</artifactId>
          <version>2.13.0</version>
          <optional>true</optional>
        </dependency>
        <dependency>
          <groupId>commons-logging</groupId>
          <artifactId>commons-logging</artifactId>
          <version>1.2</version>
          <optional>true</optional>
        </dependency>
        <dependency>
          <groupId>cglib</groupId>
          <artifactId>cglib</artifactId>
          <version>3.3.0</version>
          <optional>true</optional>
        </dependency>
    

    mybatis 역시 마찬가지 입 니 다. mybatis 는 많은 데이터 베 이 스 를 지원 하지만 사용 자 는 스스로 선택해 야 합 니 다. jar 의존 은 전달 되 지 않 습 니 다. 기능 을 사용 하려 면 다른 jar 에 의존 해 야 합 니 다. 이것 은 업무 에 의 해 결 정 됩 니 다.
    총결산
    provided 는 기능 이 다른 응용 프로그램 이나 모듈 에서 제공 되 고 optional 은 여러 가지 능력 으로 하 나 를 선택 하 며 자신 이 필요 로 하 는 jar 에 손 으로 의존 해 야 합 니 다. 그들 은 전달 성 이 없습니다.
    작은 기술, 필 자 는 deploy 에서 기본적으로 deploy 소스 코드 를 설정 하지 않 고 플러그 인 을 설정 해 야 합 니 다.
     <build>
            <plugins>
                <plugin>
                    <artifactId>maven-source-plugin</artifactId>
                    <version>3.0</version>
                    <configuration>
                        <attach>true</attach>
                    </configuration>
                    <executions>
                        <execution>
                            <phase>compile</phase>
                            <goals>
                                <goal>jar</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    

    물론 setting. xml 는 업 로드 된 사용자 암 호 를 설정 해 야 합 니 다. deploy 권한 이 있어 야 합 니 다.
    <servers>
            <server>
                <id>快照ID</id>
                <username>xxx</username>
                <password>xxx</password>
            </server>
            <server>
                <id>正式版ID</id>
                <username>xxx</username>
                <password>xxx</password>
            </server>
        </servers>
    

    deploy 가 필요 한 pom 은 설정 이 필요 합 니 다. ID 는 위의 설정 과 일치 해 야 합 니 다.
    <distributionManagement>
            <repository>
                <id>正式版ID</id>
                <url>正式版url地址</url>
            </repository>
            <snapshotRepository>
                <id>快照ID</id>
                <url>快照URL</url>
            </snapshotRepository>
        </distributionManagement>
    

    deploy 는 버 전 번 호 를 통 해 deploy 스냅 샷 인지 정식 인지 구분 합 니 다. 예 를 들 어 1.0.0 정식 버 전 1.0.0 - snapshot 스냅 샷 버 전 입 니 다.

    좋은 웹페이지 즐겨찾기