Como fazer um plug-como a arquitetura runnable?

0

Pergunta

Temos um casal de legado projetos em Java, o que nós convertido para o Maven projetos / módulos. Anteriormente, todos os projetos foram NetBeans projetos e não tinha nenhuma real dependência de gestão. Dependências externas existentes nas empresas unidade de rede e foram incluídos diretamente como Jarras no NetBeans projetos de cada módulo. Para as dependências internas, simples referências de projeto foram utilizadas. Era uma dor que construir tudo, porque o programador tinha que construir tudo na ordem certa.

Agora, estamos na posição que podemos abrir todas as Maven módulos no IntelliJ IDEA e o NetBeans. No entanto, estou tendo problemas para descobrir a melhor forma de combinar os diferentes módulos e dependências externas de uma maneira específica, o que está de acordo com a in-house plugin-estrutura. Especialmente com o NetBeans (desenvolvimento com tanto IDEs deve ser possível).

Aqui está como os repositórios git / projeto estrutura de aproximadamente parece. A estrutura de pasta dos módulos é o padrão do Maven estrutura para cada módulo. O recurso de lista de este site era muito desajeitado, então eu incluí-lo como tela...

Structure Git Repos

Temos uma interna maven repositório para o material e construção com o maven, etc. é trabalho. Para o Intellij IDEA do que eu possa executar e depurar o produto final para customer1 através de um personalizado configuração de execução, que copia os arquivos necessários necessária estrutura:

enter image description here

Com o IntelliJ IDEA, eu posso depurar o software, mas eu acho que a abordagem (personalizado IntelliJ executar config que eu criei, apontando para todos os JARs necessários e arquivos diretamente) é um pouco feio, e para o NetBeans eu não poderia encontrar um semelhante "executar" configuração do mecanismo.

Então, eu tentei alcançar este processo de compilação através da criação de um novo "Customer1Runnable" projeto Maven como uma espécie de descrição da compilação, o que aponta para todos os necessários Maven módulos. Com base nisso, eu acreditava que poderia alcançar e o automatismo para criar a necessária estrutura de software. Ergo cópia de todos os módulos em um plugin pasta e todas as dependências de módulos em uma pasta lib dentro do Customer1Runnable projeto, usando o maven assembly plugin.

Primeiro, é meu pressuposto correto de que este é um possível caso de uso para o maven assembly plugin?

O projeto em si não tem qualquer fonte de arquivos, ele é apenas um pom.xml e o assembly-config.xml descritor. Eu anexado o assembly-plugin para o pacote de fase. Quando executar o mvn package comando de todos os módulos ligados são construídas, mas para a execução do assembly-plugin que eu receber a seguinte saída:

Windows CMD output of Customer1Runnable maven project

Para começar, eu só tentei incluir um módulo na assembleia descritor. Este é o XML (opicom-assembly.xml) para ele:

<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.1.0"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.1.0 http://maven.apache.org/xsd/assembly-2.1.0.xsd">
    <id>opicom-assembly</id>
    <formats>
        <format>dir</format>
    </formats>
    <includeBaseDirectory>false</includeBaseDirectory>
    <moduleSets>
        <moduleSet>
            <useAllReactorProjects>true</useAllReactorProjects>
                <includes>
                    <include>my.company.reporting:module1</include>
                </includes>
        </moduleSet>
    </moduleSets>
</assembly>

pom.xml de Customer1Runnable projeto

 <?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>
    <version>1.6</version>
    <groupId>my.company.customer1</groupId>
    <artifactId>OpicomRunnable</artifactId>
    <packaging>pom</packaging>
    <name>OpicomRunnable</name>
    
    <repositories>
        <repository>
            <id>Company-Maven-Repo</id>
            <url>file:\\\\MyCompany\TFSDrop\MavenRepo</url>
        </repository>
    </repositories>
    
    <modules>
        <module>../my.company.customer1.module1</module>
        <module>../my.company.customer1.module2</module>
        .
        .
        .
        <module>../../MyCompany_Common/Report/my.company.reporting.module1</module>
    </modules>  
    <build>
        <plugins>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>3.3.0</version>
                <inherited>true</inherited>
                <executions>
                    <execution>
                        <id>copy-dependencies</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <descriptors>
                        <descriptor>opicom-assembly.xml</descriptor>
                    </descriptors>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

O pom de um módulo parecido com este:

<?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>

    <parent>
        <groupId>my.company</groupId>
        <artifactId>reporting</artifactId>
        <version>1.3</version>
        <relativePath>../pom.xml</relativePath>
    </parent>

    <artifactId>module1</artifactId>
    <version>1.3</version>
    <packaging>jar</packaging>



    <dependencies>
        <!-- external dependencies -->
        <dependency>
            <groupId>commons-pool</groupId>
            <artifactId>commons-pool</artifactId>
            <version>1.6</version>
        </dependency>
        <dependency>
            <groupId>com.oracle.database.jdbc</groupId>
            <artifactId>ojdbc8</artifactId>
            <version>21.1.0.0</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>3.3.0</version>
                <configuration>
                    <finalName>my-company-${project.artifactId}</finalName>
                    <appendAssemblyId>false</appendAssemblyId>
                    <outputDirectory>../build</outputDirectory>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

Obrigado por qualquer entrada sobre o que eu estou fazendo de errado aqui / como conseguir isso com o Maven.

EDITAR: Conforme solicitado, aqui um exemplo de projeto como Arquivo ZIP. https://drive.google.com/drive/folders/1ilJeTrOPgYgUTdOP0J4BQcBnPT5fls0k?usp=sharing O pai diretórios ModuleGroupCustomer e ModuleGroupCommon não representam repositórios git no cenário real. A relativa caminho de módulo é causado, porque o projeto maven qual deve ser a minha "executar config" aponta para o maven projetos em repositórios.

Talvez eu seja mal-entendido Maven em geral? Eu pensava em termos de casos de uso para gerenciamento de dependência semelhante .Net pacotes nuget, mas também como "configuração de projeto" como ordinário NetBeans/Intellij projetos.

É melhor simplesmente manter o existente NetBeans projetos para o dia-a-dia de desenvolvimento?

1

Melhor resposta

0

Depois de um longo e tedioso processo de tentativa e erro, que eu tenha encontrado uma solução que está a trabalhar para mim. Então eu decidi compartilhar a solução on-line, no caso de alguém é executado em um problema semelhante. Aqui está um link para o final do arquivo zip que contém exemplo de trabalho de projetos => Arquivo CustomerRunnable_RunningAssemblyPluginStackoverflowExample.zip https://drive.google.com/drive/u/0/folders/1ilJeTrOPgYgUTdOP0J4BQcBnPT5fls0k

O meu erro foi que eu mal entendido como o assembly-plugin funciona. A abordagem que eu executado o plugin dentro do meu agregador de pom (CustommerRunnable) está errado, como este projeto maven só existe como pai pom.

O CustommerRunnable pom.xml referências de apoio ao cliente plugins como módulos. Esses módulos não têm o CustommerRunnable como pai, mas um diferente pom. Então eu criei um separado projeto maven "distribuição". O pom.xml de distribuição define todos os plugins (necessário cliente maven módulos) como dependências. Ele também tem o CustommerRunnable pom.xml como pai. Por isso, quando eu executar o projeto no NetBeans, todos os módulos ligados são também construir(se necessário).

Ele também configura o assembly plugin. O assembly plugin é anexado para o maven pacote de fase e, portanto, executados com ele. Ele também usa um assembly personalizado descritor, que copia todos os anteriormente definidos plugins para o direito de pastas. Isso é feito usando dependencySets com a incluir e excluir padrões. Ver https://maven.apache.org/plugins/maven-assembly-plugin/advanced-descriptor-topics.html para obter detalhes sobre isso. Então, um dependencySet copia todos os arquivos jar de todos os plugins para um /a pasta plugin usando uma incluem padrão. Em seguida, esta abordagem é inversa para copiar os arquivos jar de todas as dependências externas para um /lib.

O descritor define, também, alguns arquivos extras para copiar para um determinado local. exec-maven-plugin, para que eu possa confortavelmente iniciar o software do cliente fora do NetBeans. Eu ainda não conseguir configurar a executar o plugin corretamente sobre a necessária classpath argumentos.

Endresult parecido com este: Assembly folder after building

Vale a pena destacar também que as configurações do "Criar o projeto", "projeto" e "projeto de Depuração" dentro do NetBeans precisa de um pouquinho de modificação. (Clique direito do Módulo de "distribuição" -> "Propriedades" -> ponto de "Ações"

2021-11-25 17:07:28

Em outros idiomas

Esta página está em outros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................