2017-10-11 1 views
0

나는 스프링 부트 앱으로 작업하며 결과물은 JAR 파일이다. 이 파일은 java -cp "parser.jar" com.ef.Parser 명령으로 실행하고이 질문의 범위를 벗어나는 일부 작업을 실행해야합니다. 이 시나리오에서는 두 가지 질문이 있습니다.java -cp와 java -jar의 차이점

java -jar target/parser-1.5.7.RELEASE.jar com.ef.Parser과 같은 명령을 입력하면 앱을 실행할 수 있습니다. 그러나, 명령어 java -cp target/parser-1.5.7.RELEASE.jar com.ef.Parser을 입력하면 오류가 발생합니다. Error: Could not find or load main class com.ef.Parser

무엇이 문제입니까?

나는 pom.xml 파일이 제공

@EnableJpaRepositories("com.ef.repository") 
@SpringBootApplication(scanBasePackages = {"com.ef"}, exclude = JpaRepositoriesAutoConfiguration.class) 
public class Parser implements CommandLineRunner { 

    @Autowired 
    private IpAddressService ipAddressService; 

    public Parser() { 

    } 

    public static void main(String[] args) throws Exception { 

     SpringApplication application = new SpringApplication(Parser.class); 
     application.run(args); 
    } 



    @Override 
    public void run(String... args) throws Exception { 

     System.out.println("\nHello, Spring Boot!"); 
     exit(0); 
    } 
} 

코드는 아래에 나와 있습니다 com.ef

의 패키지 이름을 가진 Parser.java를, 내가 실행할 때

<?xml version="1.0" encoding="UTF-8"?> 
<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> 
    <artifactId>parser</artifactId> 
    <name>Log-Parser</name> 
    <packaging>jar</packaging> 

    <parent> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-parent</artifactId> 
     <!-- <version>RELEASE</version> --> 
     <version>1.5.7.RELEASE</version> 
    </parent> 

    <properties> 
     <java.version>1.8</java.version> 
    </properties> 

    <dependencies> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-web</artifactId> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-data-jpa</artifactId> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-security</artifactId> 
     </dependency> 

     <!--HSQL database --> 
     <dependency> 
      <groupId>org.hsqldb</groupId> 
      <artifactId>hsqldb</artifactId> 
      <scope>runtime</scope> 
     </dependency> 


     <!--auto refresh using the dev tool--> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-devtools</artifactId> 
      <optional>true</optional> 
     </dependency> 

     <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>jstl</artifactId> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-jdbc</artifactId> 
     </dependency> 

     <!--tomcat server--> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-tomcat</artifactId> 
      <scope>provided</scope> 
     </dependency> 

     <dependency> 
      <groupId>org.apache.tomcat.embed</groupId> 
      <artifactId>tomcat-embed-jasper</artifactId> 
      <scope>provided</scope> 
     </dependency> 

     <!--live reload of the Sprign boot project--> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-devtools</artifactId> 
      <optional>true</optional> 
     </dependency> 

     <!--H2 database--> 
     <dependency> 
      <groupId>com.h2database</groupId> 
      <artifactId>h2</artifactId> 
      <version>1.4.196</version> 
      <scope>test</scope> 
     </dependency> 


     <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> 
     <dependency> 
      <groupId>mysql</groupId> 
      <artifactId>mysql-connector-java</artifactId> 
      <version>5.1.6</version> 
     </dependency> 

     <!--JSON --> 
     <dependency> 
      <groupId>com.fasterxml.jackson.core</groupId> 
      <artifactId>jackson-annotations</artifactId> 
      <version>2.9.1</version> 
     </dependency> 


     <!-- https://mvnrepository.com/artifact/commons-cli/commons-cli --> 
     <!--Commons CLI--> 
     <dependency> 
      <groupId>commons-cli</groupId> 
      <artifactId>commons-cli</artifactId> 
      <version>1.4</version> 
     </dependency> 

     <!-- https://mvnrepository.com/artifact/commons-httpclient/commons-httpclient --> 
     <dependency> 
      <groupId>commons-httpclient</groupId> 
      <artifactId>commons-httpclient</artifactId> 
      <version>3.1</version> 
     </dependency> 
    </dependencies> 


    <build> 
     <plugins> 

      <plugin> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-maven-plugin</artifactId> 
      </plugin> 

      <!--for the live update with the JSP file--> 
      <plugin> 
       <artifactId>maven-resources-plugin</artifactId> 
       <version>2.6</version> 
       <executions> 
        <execution> 
         <id>copy-resources</id> 
         <phase>validate</phase> 
         <goals> 
          <goal>copy-resources</goal> 
         </goals> 
         <configuration> 
          <outputDirectory>${basedir}/target/classes/static</outputDirectory> 
          <resources> 
           <resource> 
            <directory>src/main/webapp</directory> 
            <filtering>true</filtering> 
           </resource> 
          </resources> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

두 번째 질문은이 mvn clean package 명령을 입력하면 target 폴더에 parser-1.5.7.RELEASE.jar이 표시됩니다. pom.xml 구성을 사용하여 JAR 파일의 이름을 parser.jar으로 바꾸는 방법은 무엇입니까?

수동으로 이름을 바꾸려고했으나 제대로 작동하지 않습니다.

+0

'Parser.java'의 패키지 이름은 무엇인가? 똑같은 코드를 게시 할 수 있습니까? – Ravi

답변

2

두 번째 질문에 대한 답변 :

당신이 최종 jar 파일이 parser.jar의 이름 당신의 치어에이를 넣어해야한다고 가정하면 :

01 워드 프로세서 23,516,
<build> 
    ... 
    <finalName>parser</finalName> 
    ... 
</build> 

:

The filename (excluding the extension, and with no path information) that the produced artifact will be called. The default value is ${artifactId}-${version}.

첫 번째 질문에 대한 답변은 좀 더 복잡하다. 매우 불충분 한 말로 나는 이것을 이렇게 설명하려고 노력할 것입니다. "uber jar"는 조금 특별하고 수업을 포함하지 않을 것입니다. 클래스가 위치한 BOOT-INF 디렉토리가 있고 표준 위치 내에 스프링이 소위 "실행기"를 제공합니다. 항아리를 열고 그것을 살펴 보는 것이 좋습니다. 다음과 유사한 방법으로 응용 프로그램을 실행할 수 있습니다. 자세한 내용은 here입니다.

단지의 구조는 다음과 같습니다

BOOT-INF 
    |->classes 
    |---com.ef.Parser 
    |->lib 
META-INF 
org.springframework... 
+0

실제로'java -cp target/parser.jar -Dloader.main = com.ef.Parser org.springframework.boot.loader.PropertiesLauncher'를 의미합니까? 그러나 두 경우 모두'오류 : 메인 클래스 org.springframework.boot.loader.PropertiesLauncher'를 찾지 못했습니다. – Arefe

+1

컴퓨터에 간단한 프로젝트를 시작한 명령을 붙여 넣었습니다. . –

+0

감사합니다. – Arefe

0

1) 파일에 올바른 네임 스페이스를 사용하고 있습니까? 그것은 귀하의 코드에 표시되지 않습니다. 또한, 매니페스트 파일을 확인 - 클래스가 실행 된 것입니다 당신은 -jar 명령을 실행할 때 당신은 pom.xml 파일

빌드 섹션에

<finalName>${project.artifactId}</finalName> 

를 추가 할 필요가

2)