如何从另一场战争使用的类文件(how to use class file from another

2019-06-23 17:18发布

我们有两个不同的Web应用程序,我们希望一个战争的几个控制器延伸到另一场战争。

我们使用Maven构建项目。

包括战争中,我们已经给它的依赖性,

<dependency>
            <groupId>com.abc.exchange</groupId>
            <artifactId>employer</artifactId>
            <version>2.3.M2-SNAPSHOT</version>
            <type>war</type>
            <scope>compile</scope>
        </dependency>

这是无法建立给类未发现异常。

任何机构可以帮助我如何实现这一目标?

我收到错误Maven构建失败:

[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.3.2:compile (default-compile) on project agent-war: Compilation failure: Compilation failure:
[ERROR] \projects\trunk_new\agent\src\main\java\com\platform\agent\web\AgentEmployeeController.java:[22,41] cannot find symbol
[ERROR] symbol  : class EmployeeController
[ERROR] location: package com..platform.employer.web

Answer 1:

您可以定义战争插件产生一个单独的jar文件,它通过基于该分类可以配置 :

<configuration>
  ..
  <attachClasses>true</attachClasses>
  <archiveClasses>true</archiveClasses>
</configuration>

在此之后,你可以用这个作为其他项目单独的依赖性。 但是,最好做一个单独的jar模块出来。



Answer 2:

你在做什么用的WAR文件覆盖 。 Maven的不支持此。 然而...

该WAR插件执行在package阶段。 任何插件,如Java编译器(运行在编译阶段),执行前这一阶段将不会看到WAR插件已经提取的所有文件。 (这里是所有的Maven阶段的参考名单是否有帮助)

如果你重构你的项目结构的能力,最好的办法是创建你的控制器正常的JAR项目,并有两场战争中拉这个JAR作为一个依赖。

如果有一些原因,你不能做到这一点,你需要做这样的事情:

  1. 配置WAR插件来在运行期早于compile ,如generate-resources ,并确保它提取覆盖类文件${project.build.outputDirectory}

  2. 你也可以使用Maven Dependency插件的解压目标提取依赖WAR类${project.build.outputDirectory}

但我建议,如果在所有可能的重构你的控制器到一个单独的JAR,它是非常容易和更容易维护。



Answer 3:

把控制器到一个新的JAR项目,并从您webprojects依赖于这个控制器。



Answer 4:

添加以下插件到你的份额行家战模块(用于在同一时间创建战争和JAR神器):

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>2.4</version>
            <executions>
                <execution>
                    <id>make-a-jar</id>
                    <phase>compile</phase>
                    <goals>
                        <goal>jar</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>       
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-install-plugin</artifactId>
            <version>2.4</version>
            <executions>
                <execution>
                    <phase>install</phase>
                    <goals>
                        <goal>install-file</goal>
                    </goals>
                    <configuration>
                        <packaging>jar</packaging>
                        <artifactId>${project.artifactId}</artifactId>
                        <groupId>${project.groupId}</groupId>
                        <version>${project.version}</version>
                        <file>
                            ${project.build.directory}/${project.artifactId}-${project.version}.jar
                        </file>
                    </configuration>
                </execution>
            </executions>
        </plugin> 

然后加入依赖于你的依赖行家战模块。



Answer 5:

Java EE的visability标准规定,从一个战争类不应该提供给班在另一场战争,当他们打包成一个EAR。 大多数容器将严格执行这一点。

你应该把你希望共享成JAR,包括代码,当你想用战争的依赖。



Answer 6:

在战争项目的pom.xml包括

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.1.1</version>
        <configuration>
            <attachClasses>true</attachClasses>
        </configuration>
</plugin>

这将创建你的项目-0.0.1-快照clases.jar在目标文件夹与战争一起。

在依赖项目的pom.xml包括

 <dependency>
        <groupId>com.yourproject</groupId>
        <artifactId>you-project</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <classifier>classes</classifier>
  </dependency>

这为我工作。 希望能帮助到你。

编辑:如果我们想只有一些类文件放进瓶子里再加入这pom.xml的

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
            <version>2.4</version>
                <executions>
                    <execution>
                        <id>make-a-jar</id>
                        <phase>compile</phase>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                            <configuration>
                                <classifier>classifier_name</classifier>
                                <includes>
                                    <include>com/../..</include>
                                </includes>
                            </configuration>
                    </execution>
                </executions>
     </plugin>

在依赖项目的pom.xml包括

 <dependency>
        <groupId>com.yourproject</groupId>
        <artifactId>you-project</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <classifier>classifier_name</classifier>
  </dependency>

注意:分类名称必须在这两个文件的pom.xml同



文章来源: how to use class file from another war