2016-10-25 2 views
-1

eclipse에서는 프로젝트에 의존성 (즉, JAR 파일)을 쉽게 추가 할 수 있습니다. 프로젝트를 마우스 오른쪽 단추로 클릭하고 경로 -> 빌드 경로 -> 라이브러리 추가를 클릭하십시오.Maven 프로젝트에 의존성 추가

숨겨진 파일이 프로젝트 내부에서 ".classpath"로 만들어집니다.

import foo.bar.*; 

이 "응용 프로그램이"이제 단일 단지로 내보낼 수 있습니다 :이 파일 내부 그래서 지금은 자바 파일에 추가하여 라이브러리를 사용하여 추가 된 classpathEntry이다.

어떻게 메이븐과 이클립스없이 이것을 할 수 있습니까? 나는 명령과 함께 ... 이맥스에 :)

전환 :

mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-cli -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false 

내가 나 자신 샘플 시작 응용 프로그램을 얻을. src 폴더 안에는 명령 줄에 "hello World"를 쓰는 App.java 파일이 있습니다.

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-dependency-plugin</artifactId> 
    <version>2.10</version> 
    <executions> 
     <execution> 
     <id>copy</id> 
     <phase>package</phase> 
     <goals> 
      <goal>copy</goal> 
     </goals> 
     <configuration> 
      <artifactItems> 
      <artifactItem> 
        <groupId>com.mycompany.third-party</groupId> 
     <artifactId>commons-cli-archetype</artifactId> 
     <version>1.0-SNAPSHOT</version> 
     <type>jar</type> 
     <overWrite>false</overWrite> 
     <!--${project.basedir}  ${project.build.directory} --> 
     <outputDirectory>${project.basedir}/resources/repo</outputDirectory> 
     <destFileName>optional-new-name.jar</destFileName> 
      </artifactItem> 
      </artifactItems> 
      <outputDirectory>${project.basedir}/resources/repo</outputDirectory> 
      <overWriteReleases>false</overWriteReleases> 
      <overWriteSnapshots>true</overWriteSnapshots> 
     </configuration> 
     </execution> 
    </executions> 
    </plugin> 

지금 어떻게 내 App.java 안쪽이 항아리를 사용할 수 있습니다 다음 성공적으로 나 자신 내 프로젝트 내부 항아리 (받는다는 indedependent 배포)을 획득 pom.xml 파일에 다음과

? .classpath 파일을 수동으로 만들어야합니까? 클래스 패 턴을 자동으로 정렬하려면 어떻게해야합니까? classpassentries를 사용하여 manifest.MF를 만들려고했으나 성공하지 못했습니다. 여러 자습서를 시도했습니다. 수동으로 MANIFEST.MF를 생성 한 후

 <plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <configuration> 
     <includes> 
    <include>${project.basedir} 
    /resources/repo/optional-   new-name.jar</include> 
     </includes> 
    </configuration> 
    </plugin> 

<plugin> 
<groupId>org.apache.maven.plugins</groupId> 
<artifactId>maven-jar-plugin</artifactId> 
<configuration> 
    <archive> 
     <manifest> 
       <addDefaultImplementationEntries>true 
    </addDefaultImplementationEntries> 
      <addClasspath>true</addClasspath> 
      <mainClass>your.main.Class</mainClass> 



     </manifest> 
     <manifestEntries> 
      <Class-Path>${project.basedir}/resources/repo</Class-Path> 

     </manifestEntries> 

    <manifestFile> 
    <!-- 
     ${project.build.outputDirectory}/META-INF/MANIFEST.MF 

    --> 
    ${project.basedir}/META-INF/MANIFEST.MF 
     </manifestFile> 

    </archive> 

<!-- 
    <archive> 
    <manifest> 
     <mainClass>com.mkyong.core.App</mainClass> 
    </manifest> 
    </archive> 
    --> 


</configuration> 

:

나는 어떠한 succes에 없었다. 명령

mvn clean install 

MANIFEST.MF 후

는 비어 있습니다.

도움을 받으실 수 있습니다.

감사합니다! 일식 사용하지 않는

+1

달성하고자하는 것이 분명하지 않습니다. 어떤 항아리를 만들고 싶니? 왜 "프로젝트 안에 병"을 갖고 싶습니까? –

+0

예. app.java 파일 안에 jar 파일을 가져오고 싶습니다. 그리고 그것의 수업을 사용하십시오. eclips를 사용하고 라이브러리를 프로젝트에 추가하는 것처럼 말입니다. –

+0

Maven을 사용하면 jar를 로컬 저장소에 설치하거나 Nexus/Artifactory에 배치 할 수 있습니다. 그런 다음 pom 파일에서 으로 참조하십시오. 이런 식으로하고 싶지 않은 이유가 있습니까? –

답변

1

+1, 당신은 다음 다른 JAR에서 코드를 참조 추가 귀하의 POM에 다음을 시도 찾고 있다면 ^)

을 : XXX, YYY 및 ZZZ는

<dependencies> 
    <dependency> 
     <groupId>xxx</groupId> 
     <artifactId>yyy</artifactId> 
     <version>zzz</version> 
    </dependency> 
</dependencies> 

임포트하려는 JAR에 대한 maven 좌표.모든 내용을 결합 찾고 있다면 당신은 Joda 시간을 가져보고 된 경우가

그래서 예를 들어이

<dependency> 
     <groupId>joda-time</groupId> 
     <artifactId>joda-time</artifactId> 
     <version>2.6</version> 
    </dependency> 

될 것이다 : 당신은

을 편집 넥서스에서 다음을 얻을 수 있습니다 코드와의 의존성을 확인하고 단일 JAR로 릴리스하면 maven-shade-plugin을 살펴볼 수 있습니다. How to package a jar and all dependencies within a new jar with maven

그리고 다른 하나는 .classpath 파일로 재생하면 안됩니다. 이것은 Eclipse에 특정한 것입니다. 변경하면 Maven에 영향을 미치지 않으므로 Eclipse를 혼동시킬 수 있습니다.

+0

고맙습니다. 나는 일 동안 strugling maven되었습니다. –

+0

.classpath 대신 무엇을 사용할 수 있습니까? –

+0

나는 다음과 같이 노력해왔다 : http://www.mkyong.com/maven/maven-create-a-fat-jar-file-one-jar-example/. 내 이맥으로 코드 완성이 없다. 그래서이 예제를 통해 App.java 파일에서 가져 오기를 사용하는 방법을 알았 기 때문에 기뻤습니다. 그러나 일식 .classpath. 그것없이 수입품을 어떻게 사용할 수 있습니까? 또한 "org.dstovall : onejar-maven-plugin : 1.4.4 또는 종속성 중 하나를 해결할 수 없습니다 :"오류가 발생했습니다. " 누군가? 이 일을 쉽게 non-eclipse 방법 있는가? –

0

알 수 있습니다.

<plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-shade-plugin</artifactId> 
     <version>2.3</version> 
     <executions> 
      <execution> 
       <phase>package</phase> 
       <goals> 
        <goal>shade</goal> 
       </goals> 
      </execution> 
     </executions> 
    </plugin> 

POM을받는 사람 : 내가 추가 5 단계 대신 5 단계를 수행하는 http://www.mkyong.com/maven/maven-create-a-fat-jar-file-one-jar-example/

때까지이 튜토리얼을 따라 갔다. 봐라 :

java -jar target/dateutils.jar 

mvn package 

이 지금은 작동합니다.

도와 주셔서 감사합니다. Stormcloud! 그래서 무슨 일이 일어 났습니까? 아직 내 .jar에서 발견 된 리소스가 없습니다. 항아리가 음영 처리되었습니다. https://maven.apache.org/plugins/maven-shade-plugin/ maven이없는 서버에서 jar 파일을 내보내려면 어떻게해야합니까? 그렇다면 완전한 작업 항아리를 내보내는 방법은 무엇입니까?

다시 한번 감사드립니다!

+0

항아리 안에있는 자원! 나는 그렇게 많은 시도를했다. 잘못된 폴더를 보았습니다. : D –

+0

이전에 추가 한 링크에서 음영 플러그인에 대한 작동하는 XML 설명을 찾을 수 있습니다 – Stormcloud

관련 문제