2012-03-29 3 views
6

내 코드가 jar 파일로 패키지되어 있습니다.maven exec : jar 파일 내에서 클래스 파일 실행

jar 파일은 패키지로 제공됩니다.

jar -tfv target/test-1.0-SNAPSHOT.jar 

com/ 
com/codevalid/ 
com/codevalid/App.class 
log4j.xml 
META-INF/maven/com.codevalid/test/pom.xml 
META-INF/maven/com.codevalid/test/pom.properties 

exec:java

방법 받는다는 exec:java를 사용하여 단지 내에서 클래스 파일을 실행하여 개별 클래스 파일로있을 때 내가 그들을 실행할 수 있습니까?

+1

귀하의 질문은 무엇입니까? – magomi

+0

죄송합니다, maven exec를 사용하여 jar 파일 내에서 클래스 파일을 실행하는 방법 : java – codevalid

+0

도움이 될 수 있습니다. http://stackoverflow.com/questions/42337857/mvn-execjava-to-run-a-java-file-in-an-external-jar-file – prime

답변

3

jar 파일을 exec 플러그인에 종속성으로 포함해야합니다. 다음과 같이 다음 com.codevalid.App 클래스가 현재 프로젝트의 일환으로 컴파일 된 경우

<plugin> 
<groupId>org.codehaus.mojo</groupId> 
<artifactId>exec-maven-plugin</artifactId> 
<version>1.2.1</version> 
<executions> 
    <execution> 
    <phase>install</phase> 
    <goals> 
     <goal>java</goal> 
    </goals> 
    <configuration> 
     <mainClass>com.codevalid.App</mainClass> 
    </configuration> 
    </execution> 
</executions> 
<dependencies> 
    <dependency> 
    <groupId>myGroup</groupId> 
    <artifactId>test</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    </dependency> 
</dependencies> 

당신은 dependency 선언을 건너 뛸 수 있습니다.

+1

안녕하세요, 정보 주셔서 감사합니다,하지만이 경우에만 작동하는 것 같다. 저장소의 항아리. 내가 원하는 건 항아리를 테스트하기 전에 레포에 그것을 설치할 수있는 것입니다. 이 항아리 ** 위치를 maven exec에 지정할 수있는 방법이 있습니까? java – codevalid

5

좋아, 결국이 일을 마쳤다.
나는

mvn assembly:single 

를 사용하여 단지를 구축하고 내가

mvn exec:java -Dexec.mainClass="com.codevalid.App" 

을 사용할 수도 대안을 참조했다

java -jar ./target/App-1.0-SNAPSHOT-jar-with-dependencies.jar com.codevalid.App 

사용하지만 난의 이름을 전달하는 방법을 확실하지 않았다 클래스 패스로 jar

0

classpathScopeincludePluginDependencies 또는 includeProjectDependencies 클래스 경로에서 jar 파일을 가져 오는 매개 변수를 지정해야합니다. 여기

은 예입니다

  <configuration> 
       <executable>java</executable> 
       <mainClass>com.google.jstestdriver.JsTestDriver</mainClass> 
       <classpathScope>test</classpathScope> 
       <includePluginDependencies>true</includePluginDependencies> 
       <includeProjectDependencies>true</includeProjectDependencies> 
       <commandlineArgs>--port 9876</commandlineArgs> 
      </configuration> 
1

당신은 추가하여 exec:java 목표를 사용하여 jar 파일을 실행할 수있는 arguments :

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>exec-maven-plugin</artifactId> 
    <version>1.3.2</version> 
    <configuration> 
     <mainClass>org.example.Main</mainClass> 
     <arguments> 
      <argument>-jar</argument> 
      <argument>target/myJar-1.0-SNAPSHOT.jar</argument> 
     </arguments> 
    </configuration> 
</plugin> 

당신은 실행 항아리를 가지고하지 않으려면 진입 점을 정의하려면 executable을 설정하고 exec:exec 목표를 사용해야합니다.

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>exec-maven-plugin</artifactId> 
    <version>1.3.2</version> 
    <configuration> 
     <executable>java</executable> 
     <arguments> 
      <argument>-jar</argument> 
      <argument>target/myJar-1.0-SNAPSHOT.jar</argument> 
     </arguments> 
    </configuration> 
</plugin> 
+0

org.example.Main 클래스의 main 메서드에 인수를 전달하려면 어떻게해야합니까? – prime

+1

@prime 테스트하지는 않았지만 [''] (http://www.mojohaus.org/exec-maven-plugin/exec-mojo.html#commandlineArgs)를 사용하여 인수를 실제 응용 프로그램에 전달하십시오. – Kapep

+0

제안을 주셔서 감사합니다. 어쨌든 실제 문제 http : // stackoverflow에 대한 답변을 얻었습니다.com/questions/42337857/mvn-execjava-to-run-a-java-file-in-external-jar-file – prime