java intellij - Maven이 의존성을 타겟 / lib에 복사하도록 강제한다.




swing gui (14)

내 프로젝트의 런타임 종속성을 target/lib 폴더로 복사하려면 어떻게해야합니까?

지금 당장은 mvn clean installtarget 폴더에 프로젝트의 jar 파일 만 포함되어 있지만 런타임 의존성은 포함되어 있지 않습니다.


Answers

프로젝트를 전쟁이나 귀 타입으로 만들면 maven이 의존성을 복사합니다.


<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>com.edge</groupId>
  <artifactId>STORM2</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>STORM2</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
   <profiles>

  </profiles>
<build>
    <plugins>   
          <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
             <configuration>
                <archive>
                <manifest>
                <mainClass>com.edge.STORM2.LogAnalyserStorm</mainClass>
                </manifest>
                </archive>
                <descriptorRefs>
                <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
            </configuration>
          </plugin>

    </plugins>
  </build>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
    <groupId>org.apache.storm</groupId>
    <artifactId>storm-core</artifactId>
    <version>1.1.1</version>
    <scope>provided</scope>
</dependency>
  </dependencies>
</project>

이것은 내 , 내가 뭔가를 놓친 건가? 생성 된 jar-with 의존성은 lib 클래스 나 jar를 포함하지 않습니다.


이것은 나를 위해 작동합니다 :

<project>
  ...
  <profiles>
    <profile>
      <id>qa</id>
      <build>
        <plugins>
          <plugin>
            <artifactId>maven-dependency-plugin</artifactId>
            <executions>
              <execution>
                <phase>install</phase>
                <goals>
                  <goal>copy-dependencies</goal>
                </goals>
                <configuration>
                  <outputDirectory>${project.build.directory}/lib</outputDirectory>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>
</project>

이미 간단히 말한 것을 철자하는 것입니다. 내 코드와 함께 내 의존성을 포함하는 실행 가능한 JAR 파일을 만들고 싶었다. 이것은 나를 위해 일했다 :

(1) pom에서 <build> <plugins> 아래에 다음을 포함했습니다.

<plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>2.2-beta-5</version>
    <configuration>
        <archive>
            <manifest>
                <mainClass>dk.certifikat.oces2.some.package.MyMainClass</mainClass>
            </manifest>
        </archive>
        <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
    </configuration>
</plugin>

(2) mvn compile assembly : assembly를 실행하면 프로젝트의 대상 디렉토리에 원하는 my-project-0.1-SNAPSHOT-jar-with-dependencies.jar이 생성됩니다.

(3) java -jar my-project-0.1-SNAPSHOT-jar-with-dependencies.jar를 사용하여 JAR을 실행했습니다.


필요한 것은 pom.xml의 build/plugins 안에있는 다음 코드 단편입니다.

<plugin>
    <artifactId>maven-dependency-plugin</artifactId>
    <executions>
        <execution>
            <phase>prepare-package</phase>
            <goals>
                <goal>copy-dependencies</goal>
            </goals>
            <configuration>
                <outputDirectory>${project.build.directory}/lib</outputDirectory>
            </configuration>
        </execution>
    </executions>
</plugin>

위의 내용은 실행할 때 package 단계에서 실행됩니다.

mvn clean package

그리고 의존성은 스 니펫에 지정된 outputDirectory,이 경우에는 lib 에 복사됩니다.

가끔씩 만하고 싶다면 pom.xml을 변경할 필요가 없습니다. 다음을 실행하기 만하면됩니다.

mvn clean package dependency:copy-dependencies

${project.build.directory}/dependencies 인 기본 위치를 덮어 쓰려면 outputDirectory 라는 시스템 특성을 추가하십시오. 즉

    -DoutputDirectory=${project.build.directory}/lib

가끔이 작업을 수행하려는 경우 (따라서 POM을 변경하지 않으려는 경우)이 명령 줄을 사용해보십시오.

mvn dependency:copy-dependencies -DoutputDirectory=${project.build.directory}/lib

마지막 인수 를 생략하면 종속성이 target/dependencies 배치됩니다.


무거운 의존성을 포함하기위한 무거운 솔루션이지만 Maven의 Assembly Plugin 은 나에게 트릭입니다.

@ Rich 판매자의 대답 은 작동해야합니다. 더 간단한 경우에는 사용 설명서 에서 발췌 부분 만 필요합니다.

<project>
    <build>
        <plugins>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>2.2.2</version>
                <configuration>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

가정

  • 당신은 pom.xml을 바꾸고 싶지 않다.
  • 테스트 스코프 (예 : junit.jar) 또는 제공된 종속성 (예 : wlfullclient.jar)을 원하지 않습니다.

여기 나를 위해 일한 것은 없습니다 :

mvn install dependency:copy-dependencies -DincludeScope=runtime -DoutputDirectory=target/lib


응용 프로그램 jar의 번들을 모든 종속 항목과 MainClass를 호출하는 일부 스크립트와 함께 전달하려면 appassembler-maven-plugin .

다음 구성은 Window 및 Linux 용 스크립트를 생성하여 모든 종속성 jar를 참조하는 생성 된 경로를 사용하여 모든 종속성을 target / appassembler 아래의 lib 폴더로 다운로드합니다. assembly 을 사용하여 전체 패키지를 패키지화 할 수 있습니다 appassembler 디렉토리를 jar 파일과 함께 저장소에 설치 / 배치 된 zip으로 복사하십시오.

  <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>appassembler-maven-plugin</artifactId>
    <version>1.0</version>
    <executions>
      <execution>
        <id>generate-jsw-scripts</id>
        <phase>package</phase>
        <goals>
          <goal>generate-daemons</goal>
        </goals>
        <configuration>
          <!--declare the JSW config -->
          <daemons>
            <daemon>
              <id>myApp</id>
              <mainClass>name.seller.rich.MyMainClass</mainClass>
              <commandLineArguments>
                <commandLineArgument>start</commandLineArgument>
              </commandLineArguments>
              <platforms>
                <platform>jsw</platform>
              </platforms>              
            </daemon>
          </daemons>
          <target>${project.build.directory}/appassembler</target>
        </configuration>
      </execution>
      <execution>
        <id>assemble-standalone</id>
        <phase>integration-test</phase>
        <goals>
          <goal>assemble</goal>
        </goals>
        <configuration>
          <programs>
            <program>
              <mainClass>name.seller.rich.MyMainClass</mainClass>
              <!-- the name of the bat/sh files to be generated -->
              <name>mymain</name>
            </program>
          </programs>
          <platforms>
            <platform>windows</platform>
            <platform>unix</platform>
          </platforms>
          <repositoryLayout>flat</repositoryLayout>
          <repositoryName>lib</repositoryName>
        </configuration>
      </execution>
    </executions>
  </plugin>
  <plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>2.2-beta-4</version>
    <executions>
      <execution>
        <phase>integration-test</phase>
        <goals>
          <goal>single</goal>
        </goals>
        <configuration>
          <descriptors>
            <descriptor>src/main/assembly/archive.xml</descriptor>
          </descriptors>
        </configuration>
      </execution>
    </executions>
  </plugin> 

direcotry를 zip으로 패키징하는 어셈블리 디스크립터 (src / main / assembly)는 다음과 같습니다.

<assembly>
  <id>archive</id>
  <formats>
    <format>zip</format>
  </formats>
  <fileSets>
    <fileSet>
     <directory>${project.build.directory}/appassembler</directory>
     <outputDirectory>/</outputDirectory>
    </fileSet>
  </fileSets>
</assembly>

mvn install dependency:copy-dependencies 

대상 폴더에 종속성 디렉터리가 만들어져 나를 위해 작동합니다. 그것처럼!


어떤 다른 단계의 maven을 사용하지 않고 대상 디렉토리에 의존성을 복사해야하는 경우를위한 간단하고 우아한 솔루션 (Vaadin과 작업 할 때 매우 유용함).

완전한 예 :

<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/maven-v4_0_0.xsd">

    <modelVersion>4.0.0</modelVersion>
    <groupId>groupId</groupId>
    <artifactId>artifactId</artifactId>
    <version>1.0</version>

    <dependencies>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.1.1</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-dependency-plugin</artifactId>
                    <executions>
                        <execution>
                            <phase>process-sources</phase>

                            <goals>
                                <goal>copy-dependencies</goal>
                            </goals>

                            <configuration>
                                <outputDirectory>${targetdirectory}</outputDirectory>
                            </configuration>
                        </execution>
                    </executions>
            </plugin>
        </plugins>
    </build>
</project>

그런 다음 mvn process-sources 실행하십시오.

jar 파일 종속성은 /target/dependency 에서 찾을 수 있습니다.



  1. mvn install

명령 줄에서 아래 코드를 작성할 수 있습니다. 또는 이클립스 내장 메이븐을 사용하고 있다면 프로젝트 -> Run As -> Run configurations -> 왼쪽 패널에서 Maven Build -> new configuration ->을 클릭하십시오. 목표 및 기본 디렉토리의 코드 : $ {project_loc : NameOfYourProject} -> 실행

mvn install:install-file
   -Dfile=<path-to-file>
   -DgroupId=<group-id>
   -DartifactId=<artifact-id>
   -Dversion=<version>
   -Dpackaging=<packaging>
   -DgeneratePom=true

각각의 의미는 다음과 같습니다.

<path-to-file> :로드 할 파일의 경로 예 -> c : \ kaptcha-2.3.jar

<group-id> : 파일을 등록해야하는 그룹, 예 : -> com.google.code

<artifact-id> : 파일의 이슈 이름 eg -> kaptcha

<version> : 파일의 버전 예 -> 2.3

<packaging> : 파일 패키징 eg -> jar

2.After가 설치되면 단지 pom.xml에 jar를 선언합니다.

 <dependency>
      <groupId>com.google.code</groupId>
      <artifactId>kaptcha</artifactId>
      <version>2.3</version>
 </dependency>






java maven dependencies maven-2 maven-3